バックグラウンドジョブを実行するには、いくつかの条件があります。
condition-command && condition-command && background-job &
問題は、次のようにジョブが実行されるまで条件をブロックしたいということです。
condition-command; condition-command; background-job &
ただし、これは条件ではなく、前のコマンドが失敗した場合にジョブを実行したくありません。
私はそれが非同期であることを知っていますが、そうではありません。次の2つのスクリプトは同じでなければなりませんが、そうではありません。
sleep 2; echo foo & sleep 1; echo bar; wait # prints foo, then bar: correct
sleep 2 && echo foo & sleep 1; echo bar; wait # prints bar, then foo: bug
変数をテストするか、最後の変数をサブシェルに入れるとうまくいくことがわかりましたが$?
(それからジョブ制御を失い、デーモンを避けたい)、bashがこれを行う理由と実行場所が何であるかを知りたいです。記録はありますか?この動作を防ぐ方法はありますか?
編集する:Chainedif
は逆重なので代替として受け入れません。
編集2:サブシェルが可能であることを知っていますが、私には機能しません。結局、いくつかのコマンドを実行したいと想像してみましょうwait
。ディレクトリが存在するかどうかを確認することは可能です/proc/$PID
が、複数の作業がある場合は面倒です。
編集3:主な質問は、bashがこれを行う理由とそれに関する文書はどこにありますか?どんな解決策でもないボーナスです!
ベストアンサー1
背景を行全体に適用したくない場合は、次のようにしますeval
。
sleep 2 && eval 'sleep 10 &'
wait
2番目のコマンドだけがバックグラウンドジョブであり、実行できる正しいバックグラウンドジョブになります。