我正在尝试在 bash shell 中并行运行 3 个命令:
$ (first command) & (second command) & (third command) & wait
这个问题是如果first command
失败,例如,退出代码是0
(我猜是因为wait
成功了) .
期望的行为是,如果其中一个命令失败,退出代码将为非零(理想情况下,其他正在运行的命令将停止)。
我怎样才能做到这一点?
请注意,我想并行运行命令!
最佳答案
我能想到的最好的是:
first & p1=$!
second & p2=$!
...
wait $p1 && wait $p2 && ..
或
wait $p1 || ( kill $p2 $p3 && exit 1 )
...
然而,这仍然强制执行检查进程的命令,因此如果第三个立即失败,您将不会注意到它,直到第一个和第二个完成。
关于Bash &(符号)运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9258387/