在Bash中,我希望多次并行调用一个命令,同时捕获所有进程退出代码。
我知道如何开始并等待它们,但等待只会给我退出最后一个进程的退出代码。我还需要较短生命过程的退出代码。
不幸的是我没有bash 4.3,所以wait -n
不是一个选项,也不是#3004811
#16032001几乎问了同样的问题,但也没有提供任何解决方案。
我目前唯一能想到的方法是编写一个帮助脚本,将退出代码存储在一个文件中,但这听起来不是一个干净的解决方案。
答案 0 :(得分:2)
我没有意识到虽然孩子立刻被bash收获,但内置等待仍然可以访问pid的退出代码。
#!/bin/bash
FAIL=0
PIDS=""
echo "starting"
sleep 5 &
PIDS="$PIDS $!"
sleep 3 &
PIDS="$PIDS $!"
/bin/false &
PIDS="$PIDS $!"
sleep 3 &
PIDS="$PIDS $!"
for job in $PIDS
do
wait $job || let "FAIL+=1"
echo $job $FAIL
done
echo $FAIL
if [ "$FAIL" == "0" ];
then
echo "YAY!"
else
echo "FAIL! ($FAIL)"
fi
正确给出
starting
14772 0
14773 0
14774 1
14775 1
1
FAIL! (1)
只有第三个进程(/ bin / false)失败,由第三行中从0切换到1表示。