功能完成后如何输出激励代码

时间:2018-11-20 20:48:39

标签: function sh exit-code

如果在shell脚本中。带循环的函数有两个,我在脚本中运行了这两个函数,然后将两者都放在了后台。

例如:

#!/bin/bash

function a {
  for 1 in 2; do
    if 3.sh; then
       echo 'done'
    else
       exit 1
    fi
  done
}

function b {
  for a in b; do
    if c.sh; then
       echo 'done'
    else
       exit 1
    fi
  done
}

a &
b &

现在,由于这两个功能都在后台运行,因此一旦我运行脚本,它将立即完成。我的期望是捕获脚本的退出代码,这样,如果在循环a和b中发生任何错误,我就可以得到确认。

我的另一个担心是,如果在循环a期间发生任何事情,该脚本将立即终止(因为给出了退出代码1),所以即使b是无辜的,b也将终止。

1 个答案:

答案 0 :(得分:0)

如果您等待后台作业,则wait的退出状态将是该作业的退出状态。

a & a_pid=$!
b & b_pid=$!

wait $a_pid
a_status=$?
wait $b_pid
b_status=$?

您可能会反对,如果ba之前完成,那么您必须等待获得b的状态。 可能是个问题,但前提是您还有其他事情要做。不管先完成哪一项工作,两者所需的时间都相同。 (如果b首先完成,那么wait $b_pid一旦运行就将立即退出。)