両方のコマンドを並列に実行し、そのうちの1つが終了コード0で終了した場合に終了する方法は何ですか?

両方のコマンドを並列に実行し、そのうちの1つが終了コード0で終了した場合に終了する方法は何ですか?

同時に実行したいコマンドが2つあります。そのうちの1つがコード0または1で終了したら、スクリプトを終了したいと思います。 Linux(Ubuntu)でこれを達成するにはどうすればよいですか?

cmd1 &
cmd2 &
wait

答え1

このような:

(cmd1; [ "$?" -lt 2 ] && kill "$$") &
(cmd2; [ "$?" -lt 2 ] && kill "$$") &
wait

答え2

4.4以上bash:

cmd1 & p1=$!
cmd2 & p2=$!

wait -n
[ "$?" -gt 1 ] || kill "$p1" "$p2"
wait

wait -n最初のバックグラウンドジョブが完了するのを待ち、終了ステータスを報告します。$?

最初のジョブが0または1で終了したときに別のジョブを終了するとします。変化kill命じるexitスクリプトを終了し、親と子に関係なく別のコマンドを実行したい場合。

関連情報