2つのシェルスクリプトがabc.sh
実行されdef.sh
、abc.sh
returnステートメントを介してdef.sh
制御が返されます。abc.sh
echoコマンドと終了コマンドがありますが、うまくいかないようです。
以下から、以下を見ることができます。abc.sh
sleep 60;
bash ./gen_files/def.sh ./gen_files/regress_rpt_1_0.txt
sleep 60;
bash ./gen_files/def.sh ./gen_files/regress_rpt_1_1.txt
sleep 10;
echo "COMPLETED **** EXITING NOW ****";
exit 0;
def.shの内容を見つけてください
#!/bin/bash
function build_status()
{
FILE=$1
if test -f "$FILE"; then
echo "$FILE File Exists"
if `grep -q "Build Job" $FILE`;then
echo "Build found,Continuing to next launch statement"
return
else
echo "Build Not Found,Waiting for the build"
sleep 120
build_status $FILE
fi
else
echo "$FILE Not Found"
#build_status $FILE
fi
}
FILE=$1
build_status $FILE
印刷後、スクリプトを終了して端末に戻りたいですCOMPLETED **** EXITING NOW ****
。しかし、今私が見ているのは、スクリプトがそれ自体で終了しないということです。端末で印刷が表示され、シェルスクリプトはまだアクティビティなしで実行されています。
答え1
abc.sh
バックグラウンドジョブとして実行します。これは、スクリプトがバックグラウンドで実行されている間に、スクリプトの出力(したがってスクリプト)が端末に印刷def.sh
されることを意味します。abc.sh
スクリプトが完了すると終了します。
バックグラウンドでスクリプトを実行し、それを端末に出力するという事実は、スクリプトを起動した直後にシェルから印刷されたプロンプトをオーバーライドすることを意味します。シェルは、を押すまで新しいプロンプトを出力しませんEnter。
解決策は、スクリプトの出力をログファイルに書き込むことです。
./abc.sh >abc.log 2>&1 &
(これを行うと出力とエラーが記録され、abc.log
存在しない場合は生成され、存在する場合は消去されます。)またはバックグラウンドでスクリプトを実行しないでください。
./abc.sh