函数完成后如何输出退出代码

How to output the excit code after the function finished

如果在 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 是无辜的,它也会被终止。

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

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

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

您可能会反对,如果 ba 之前完成,那么您必须等待才能获得 b 的状态。 可能 是个问题,但前提是您还有其他事情要做。无论哪个作业先完成,both 完成所需的时间是相同的。 (如果 b 确实先完成,那么 wait $b_pid 将在 运行 时立即退出。)