ジョブID 1と2の2つのバックグラウンドジョブがあります。作業1が終わった後に何かをしたいのですが、止まっているのは嫌です。
現在私が得るものwait 1 && do whatever
ですが、このコマンドを使用すると、現在のシェルを自動的にブロックします。wait
バックグラウンドで自分で実行したいです。 zshで試しましたが、うまくwait 1 & && do whatever
いきません。エラーが発生しますzsh: parse error near '&&'
。
注:私が望むことが重要です。バックグラウンドで待機中代わりに一部のバックグラウンドジョブが完了するのを待っています。
答え1
構文エラーは、&
および両方の&&
コマンド区切り文字であるために発生します。&
バックグラウンドでコマンドを起動し、すぐに次のコマンドを実行し、最初のコマンドの実行中に完了するのを待ってから、最初のコマンドが成功した場合は&&
2番目のコマンドを実行します。
非同期的に実行したい2つの項目を3番目の項目でバックグラウンドで実行するには、次のパターンを使用します。
( first_thing && second_thing ) &
third_thing
選択科目wait $!
後ろに third_thing
続行する前に、最初の2つを完了してください。
wait 1
PID 1が完了するまで待ちます。これは、シェルの実行中はほとんど発生しません。あなたはそれをしたいでしょうwait %1
。ちょっと待ってください。作業仕様1.
答え2
wait
答えではないようです。 ~によるとこれ、tail
より良いソリューションです。私は使うべきですか?( tail --pid=WHATEVER -f /dev/null && do whatever ) &