スクリプトから生成されたいくつかのサブプロセスが終了して終了コード!= 0を返すまでbashスクリプトで待機する方法は、サブプロセスのいずれかがコード!= 0で終了する場合です。
簡単なスクリプト:
#!/bin/bash
for i in `seq 0 9`; do
doCalculations $i &
done
wait
上記のスクリプトは、生成された10個すべてのサブプロセスを待機しますが、常に終了ステータス0を返します(を参照help wait
)。このスクリプトを変更して、生成されたサブプロセスの終了ステータスを検出し、サブプロセスのいずれかがコード!= 0で終了したときに終了コード1を返すようにするにはどうすればよいですか?
サブプロセスのPIDを収集し、それらを順番に待って終了ステータスを合計するよりも良い解決策はありますか?
wait -n
は1つの小さな問題があります。子ジョブが残っていない場合(競合状態)、ゼロ以外の終了ステータス(失敗)を返します。これは、失敗した子プロセスと区別できない場合があります。
wait -n
、最初の/次のコマンドが完了したときにのみ戻るように最新のbashで使用できます。