これにより、両方のプロセスが開始され、最初のプロセスが終了してから他のプロセスが終了するまで待機します。
#!/bin/bash
{ cd ./frontend && gulp serve; } &
{ cd ./backend && gulp serve --verbose; } &
wait -n
pkill -P $$
使い方
開始:
{ cd ./frontend && gulp serve; } &
{ cd ./backend && gulp serve --verbose; } &
上記の2つのコマンドは、両方のプロセスをバックグラウンドで開始します。
待つ
wait -n
これは、いずれかのバックグラウンドジョブが終了するのを待ちます。
-n
オプションがあるため、これにはbash 4.3以上が必要です。
殺します
pkill -P $$
これにより、現在のプロセスが親であるすべてのジョブが強制終了されます。言い換えると、これはまだ実行中のバックグラウンドプロセスを強制終了します。
システムにがない場合、pkill
この行を次のものに置き換えてみてください。
kill 0
また、現在のプロセスグループを強制終了します。
簡単にテスト可能な例
スクリプトを変更することにより、gulp
インストールしなくてもテストできます。
$ cat script.sh
#!/bin/bash
{ sleep $1; echo one; } &
{ sleep $2; echo two; } &
wait -n
pkill -P $$
echo done
上記のスクリプトはasとして実行できbash script.sh 1 3
、最初のプロセスが最初に終了します。または、bash script.sh 3 1
次のように実行すると、2番目のプロセスが最初に終了します。どちらの場合でも、これが希望どおりに動作することがわかります。
gulp ./fronend/serve && gulp ./backend/serve --verbose
?