バックグラウンドプロセスが完了するのを待つ方法は?

バックグラウンドプロセスが完了するのを待つ方法は?

私はbashシェルでAmazon Linuxを使用しています。続行する前に、バックグラウンドで複数のプロセスを実行し、プロセスが完了するまで(成功またはエラー終了コードで)待ちたいと思います。だから私は次のことを試みます:

node test.js 2>&1 | tee --append $TFILE1 &
proc1=$!
node SkyLocal.js 2>&1 | tee --append $TFILE2 &
proc2=$!

wait proc1
rc1=$?
wait proc2
rc2=$?

ただし、次のエラーが発生します。

/home/jboss/.jenkins/jobs/myproject/workspace/automated-tests/nodejs/run_tests.sh: line 36: wait: `proc1': not a pid or valid job spec
/home/jboss/.jenkins/jobs/myproject/workspace/automated-tests/nodejs/run_tests.sh: line 38: wait: `proc2': not a pid or valid job spec

バックグラウンドプロセスのPIDをキャプチャしてから、続行する前にそのプロセスが完了するまでどのように待つことができますか?

答え1

エラーメッセージが示すように、このwaitコマンドは変数名でpidを見つけようとしません(組み込みコマンドなので、理論的にはこれを行うことができます)。

waitproc1およびproc2変数に格納されている実際のpid値(またはジョブ番号)を渡す必要があります。$変数名を先頭に追加して、通常どおりにこれを実行できます。これにより、シェルは変数名をコマンドに渡す前にその値に置き換えますwait

関連情報