シェルスクリプトコマンドを順次実行する

シェルスクリプトコマンドを順次実行する

私のスクリプト(.ksh):

cmd1 & cmd2

cmd1バックグラウンドで実行し、cmd2起動後にのみ実行を開始したいと思います。cmd1ただし、スクリプトを実行するとcmd2以前に起動し、cmd1問題が発生します。

この問題をどのように解決できますか?

答え1

条件付き演算子を使用すると、&&他の実行が開始される前に1つの実行が「完了」するように強制できます。 (「完了」は実際にプロセスをバックグラウンドで送信するため、「完了」を引用符で囲んでいます。)

しかし、

$ (echo "foo" &) ; echo "bar"

出力することができる

bar
foo

次のような

$ (echo "foo" &) && echo "bar"

出力されます

foo
bar

なぜなら、シェルは2番目のコマンドを実行する前に最初のコマンドの終了状態を決定する必要があるからです。

答え2

最も簡単な解決策は小さなものを追加することですsleep

cmd1 & sleep 1 && cmd2

より信頼性の高い方法は、ラッパーを使用して実際に実行され続けられることcmd2を確認することです。cmd1

それは次のとおりです。

while ! pgrep cmd1; do
    sleep 1
done
cmd2

while !BTWと交換できますuntil

関連情報