スクリプトを変更してバックグラウンドでプロセスを並列化しました。
(Solaris で bash と ksh の両方を使用して) 実験を行ったところ、'wait' がゼロでない場合は終了ステータスを出力すること、または PID 引数が指定されていない場合にゼロ以外の終了を返すジョブのリストが出力されることを発見しました。例えば
バッシュ:
$ sleep 20 && exit 1 &
$ sleep 10 && exit 2 &
$ wait
[1]- Exit 2 sleep 20 && exit 2
[2]+ Exit 1 sleep 10 && exit 1
Ksh:
$ sleep 20 && exit 1 &
$ sleep 10 && exit 2 &
$ wait
[1]+ Done(2) sleep 20 && exit 2
[2]+ Done(1) sleep 10 && exit 1
この出力は stderr に書き込まれるため、OP の例に対する簡単な解決策は次のようになります。
#!/bin/bash
trap "rm -f /tmp/x.$$" EXIT
for i in `seq 0 9`; do
doCalculations $i &
done
wait 2> /tmp/x.$$
if [ `wc -l /tmp/x.$$` -gt 0 ] ; then
exit 1
fi
これの間:
wait 2> >(wc -l)
カウントも返しますが、tmp ファイルはありません。これは、次のように使用することもできます。
wait 2> >(if [ `wc -l` -gt 0 ] ; then echo "ERROR"; fi)
しかし、これは tmp ファイル IMO よりもはるかに便利ではありません。サブシェルで「待機」を実行することを避けながら、tmpファイルを回避する便利な方法を見つけることができませんでした。これはまったく機能しません。