Job-control commands report whether background work is running or stopped. A small table can model the decision without launching jobs.

Program

Play the script to choose a job name and read its modeled status.

selected_job
job_status_table.sh
Replay: real traced execution (multi-file project)
#!/usr/bin/env bash

selected_job="build"
build_status="running"
deploy_status="stopped"
if [[ "$selected_job" == "build" ]]; then
    status="$build_status"
else
    status="$deploy_status"
fi
echo "$selected_job:$status"
#!/usr/bin/env bash

selected_job="deploy"
build_status="running"
deploy_status="stopped"
if [[ "$selected_job" == "build" ]]; then
    status="$build_status"
else
    status="$deploy_status"
fi
echo "$selected_job:$status"
  1. selected_job ← build

    3selected_job="build"4build_status="running"
    values this stepbuildselected_job
  2. build_status ← running

    3selected_job="build"4build_status="running"5deploy_status="stopped"
    values this steprunningbuild_status
  3. deploy_status ← stopped

    4build_status="running"5deploy_status="stopped"6if [[ "$selected_job" == "build" ]]; then
    values this stepstoppeddeploy_status
  4. if [[ "$selected_job" == "build" ]]; then

    5deploy_status="stopped"6if [[ "$selected_job" == "build" ]]; then7    status="$build_status"
    values this stepbuildselected_job
  5. status ← running

    6if [[ "$selected_job" == "build" ]]; then7    status="$build_status"8else
    values this steprunningstatusrunningbuild_status
  6. echo "$selected_job:$status"

    10fi11echo "$selected_job:$status"
    outputbuild:running
    values this stepbuildselected_jobrunningstatus
  1. selected_job ← deploy

    3selected_job="deploy"4build_status="running"
    values this stepdeployselected_job
  2. build_status ← running

    3selected_job="deploy"4build_status="running"5deploy_status="stopped"
    values this steprunningbuild_status
  3. deploy_status ← stopped

    4build_status="running"5deploy_status="stopped"6if [[ "$selected_job" == "build" ]]; then
    values this stepstoppeddeploy_status
  4. if [[ "$selected_job" == "build" ]]; then

    5deploy_status="stopped"6if [[ "$selected_job" == "build" ]]; then7    status="$build_status"
    values this stepdeployselected_job
  5. status ← stopped

    8else9    status="$deploy_status"10fi
    values this stepstoppedstatusstoppeddeploy_status
  6. echo "$selected_job:$status"

    10fi11echo "$selected_job:$status"
    outputdeploy:stopped
    values this stepdeployselected_jobstoppedstatus
job status Interactive Bash can show whether jobs are running, stopped, or done.
modeled table A fixed table avoids depending on real background process timing.
conditional selection The `if` branch copies the selected job's status into one output variable.