函数完成后如何输出退出代码
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=$?
您可能会反对,如果 b
在 a
之前完成,那么您必须等待才能获得 b
的状态。 可能 是个问题,但前提是您还有其他事情要做。无论哪个作业先完成,both 完成所需的时间是相同的。 (如果 b
确实先完成,那么 wait $b_pid
将在 运行 时立即退出。)
如果在 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=$?
您可能会反对,如果 b
在 a
之前完成,那么您必须等待才能获得 b
的状态。 可能 是个问题,但前提是您还有其他事情要做。无论哪个作业先完成,both 完成所需的时间是相同的。 (如果 b
确实先完成,那么 wait $b_pid
将在 运行 时立即退出。)