スクリプトがあります
for i in 1 2 3 4; do
do_something $i &
done
呼び出すと、do_something
他のすべての項目が終了する前に終了します。私が見つけたこの問題さまざまな答えがあります。
編集する:help wait
教えてください
IDが指定されていない場合は、現在アクティブなすべての子プロセスが待機し、ステータス0が返されます。
wait
最後に1つだけ追加すれば十分ですか?
答え1
はい、wait
すべてのバックグラウンドジョブが終了するのを待つには、最後にパラメータなしで単一のコマンドを使用するだけで十分です。
サブシェルで開始されたバックグラウンドジョブは、そのジョブを開始したのと同じサブシェルで待機する必要があります。表示されるコードにはそのようなインスタンスはありません。
また参考にしてくださいあなたがリンクした質問に関する質問終了ステータスの確認バックグラウンドタスク。これ会議各バックグラウンドジョブに対して1回実行する必要がありますwait
(ジョブのPIDを引数として使用)。
答え2
私の考えでは、パラメータなしで一度だけ待つだけで十分ですが、これは良い習慣ではありません(デフォルトの動作に依存)。各呼び出しから返されたPIDを収集し、そのPIDを明示的に待ちます。