バックグラウンドでどのように待っていますか?

バックグラウンドでどのように待っていますか?

ジョブ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 1PID 1が完了するまで待ちます。これは、シェルの実行中はほとんど発生しません。あなたはそれをしたいでしょうwait %1。ちょっと待ってください。作業仕様1.

答え2

wait答えではないようです。 ~によるとこれtailより良いソリューションです。私は使うべきですか?( tail --pid=WHATEVER -f /dev/null && do whatever ) &

関連情報