Bash&(&符号)运算符

Mis*_*hko 16 bash exit-code background-process

我试图在bash shell中并行运行3个命令:

$ (first command) & (second command) & (third command) & wait
Run Code Online (Sandbox Code Playgroud)

这个问题是,如果first command失败,例如,退出代码是0(我猜因为wait成功).

期望的行为是,如果其中一个命令失败,退出代码将为非零(理想情况下,其他正在运行的命令将被停止).

我怎么能实现这个目标?

请注意,我想并行运行命令!

Kar*_*ath 8

我能想到的最好的是:

first & p1=$!
second & p2=$!
...

wait $p1 && wait $p2 && ..
Run Code Online (Sandbox Code Playgroud)

要么

wait $p1 || ( kill $p2 $p3 && exit 1 )
...
Run Code Online (Sandbox Code Playgroud)

但是,这仍然会强制执行流程检查的命令,因此如果第三个会立即失败,则在第一个和第二个完成之前您将不会注意到它.