私は、サーバをセットアップするときの人生を楽にするスクリプトを構築しています。私はそれが続行する前に完了するのプロセスを待つために私のスクリプトを取得しようとしていますBASHスクリプトがPIDを待つことができません
# Code to MV/CP/CHOWN files (working as intended)
sudo su $INSTALL_USER -c \
"sh $SOFTWARE_DIR/soa/Disk1/runInstaller \
-silent -response $REPONSE_LOC/response_wls.rsp \
-invPtrLoc $ORA_LOC/oraInsta.loc \
-jreLoc /usr/java/latest" >&3
SOA_PID = pgrep java
wait $SOA_PID
# Code below this which requires this be completed before execution.
:
私はこのラインの問題を抱えています。
スクリプトは実行されますが、待機するのではなく続行され、スクリプトが終了した後にインストーラの実行が実行されます。私は、自分のプロセスを開始する前にこの部分をインストールする必要がある他のインストーラ部分を持っています。
私は$を使ってみました!このピースは別のユーザーによって実行されるため、それが機能するかどうかはわかりません。
ありがとうございます。
http://shellcheck.netでもスクリプトを実行し、エラーを修正したときに戻ってきます。 – andlrc
'SOA_PID = pgrep java'は' SOA_PID = $(pgrep java) 'のようにする必要があります - - つまり空白がなく、サブプロセス($(...)ビット)を呼び出します...そして、おそらく複数のJavaプロセスを処理する必要があるので、 'grep'は複数の値を返します..... – gilez
バックグラウンドでスクリプトを実行していないので、待つことはありません。そして、プロセスは自分の子供だけを待つことができます - あなたが元のシェルの子ではなく 'su'が実行するシェルの子であるため、' su'によって実行されているプロセスを待つことはできません。 – Barmar