2つ走っています。mysql
spbashスクリプトから。同時に起動し(リモートサーバーで実行している)、バックグラウンドにして完了したら、次のステップに進みたいと思います。exit status
エラーが発生した場合に備えて、両方をインポートしたいと思います。これを念頭に置いて、以下のコマンドを試してみましたが、うまくいきませんsleep
でした。
編集するジェフ・シャーラーによると回答:私が試したことは次のとおりです。
givinv@87-109:~$ sleep5 & PID5=$!; exit5=$?; sleep 4 & PID4=$!; exit4=$?; wait $PID5 $PID4; echo $exit5 $exit4
[1] 29530
[2] 29531
No command 'sleep5' found, did you mean:
Command 'sleep' from package 'coreutils' (main)
sleep5: command not found
[1]- Exit 127 sleep5
[2]+ Done sleep 4
0 0
givinv@87-109:~$ unset exit5 exit4
givinv@87-109:~$ sleep5 & exit5=$?;PID5=$!; sleep 4 & exit4=$?;PID4=$!; wait $PID5 $PID4; echo $exit5 $exit4
[1] 29535
[2] 29536
No command 'sleep5' found, did you mean:
Command 'sleep' from package 'coreutils' (main)
sleep5: command not found
[1]- Exit 127 sleep5
[2]+ Done sleep 4
0 0
givinv@87-109:~$
私sleep5が意図的に配置されました(無効なコマンド)。0
しかし、まだexit status
。上記のコマンドを実行すると、次の行が表示されます[1]- Exit 127 sleep5
。スクリプトで実行したときにそれをキャプチャできますか?
exit status
2つのコマンドを実行する方法同時に?
答え1
~からバッシュのマニュアルページ、強調のためにイタリック体:
待つ
wait[-n] [作業仕様または pid...]
プロセスID pidまたはjobspec jobspecで指定された各サブプロセスが終了するのを待ちます。そして待った最後のコマンドの終了状態を返します。
背景記号を誤って配置したようです&
。
sleep5;exit5=$? &PID5=$!;$PID5 を待ちます;echo $?;echo $exit5
5秒間待機状態にし、ジョブのジョブexit5
IDを設定してPID5
から、ジョブが正常に完了するまで待ちますecho
。最後の項目には空echo
行が表示されます。これは、バックグラウンドプロセス(サブシェル)が終了し、exit5
変数が割り当てられていない(空の)状態であるためです。
おそらくこれがあなたが望むものですか?
sleep5&PID5=$!;$PID5 を待ちます;exit5=$?;echo $exit5
バックグラウンドに切り替えてsleep 5
PIDをに保存しますPID5
。プロセスが終了するのを待ってから戻りコードをにキャプチャし、保存されたexit5
戻りコードをエコーします。