シェルスクリプトの終了

シェルスクリプトの終了

2つのシェルスクリプトがabc.sh実行されdef.shabc.shreturnステートメントを介して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

関連情報