サブスクリプトが失敗したときに親スクリプトを終了する方法

サブスクリプトが失敗したときに親スクリプトを終了する方法

別のスクリプトを呼び出すスクリプトがあります。

2番目のスクリプトが失敗しても、元のスクリプトから継承され続けます。

以下はスクリプトの最初の部分です。

#OBJ_TYP=`echo $Job_detail_corr  | awk -F'|' '{ print $7 }'`
case "$OBJ_TYP" in
"WF")

        echo "running workflows"
        . $SCRIPTS_PATH/Schedule_Wkflw.sh $DOM_NM $INT_SVC_NM $OBJ_NM $OS_PF_NM $LOG_PATH >> $LOG 2>&1
        RET_CODE=$?

        echo " RETURN CODE from status check is " $RET_CODE  >> $LOG 2>&1
         if [[ $RET_CODE -eq 0 ]]
        then
        echo "******************Completed execution of run_workflow*******************" >> $LOG 2>&1
        exit 0
        elif [[ $RET_CODE -eq 1 ]]
        then
         cho "******************Error executing run_workflow*******************" >> $LOG 2>&1
             exit 1
        else
             exit 1
            fi
 ;;

以下はSchedule_wkflw.shです。

./infacmd.sh wfs startworkflow -dn $DOM_NM  -un controlm -sn $INT_SVC_NM -a Application_$WF_NM -wf $WF_NM -osp $OS_PROFILE_NM -w true > $LOG_PATH/workflow.log.`date +%Y%m%d%H%M%S`

case $? in
0)
   echo "****** Workflow started successfully.******";
   exit 0;;
*)
   echo "****** Error starting workflow. ******";
   exit 1;;
esac

これで問題は、Schedule_wkflw.shが正しく実行されない場合、親スクリプトが終了0を提供することです。

親スクリプト実行の戻りコード

. $SCRIPTS_PATH/Schedule_Wkflw.sh $DOM_NM $INT_SVC_NM $OBJ_NM $OS_PF_NM $LOG_PATH >> $LOG

常に0を提供するので、0番出口に表示されます。

誰でもこの問題を正しく処理する方法を提案できますか?

ベストアンサー1

私は"case$?"が2番目のスクリプトにあるとは思いません。ケース自体が$?に変更されると予想されます。

最初のスクリプトからヒントを取得します。RET_CODE = $?何もない他のもの。

このスクリプトでエコーを見ることはできますか?最初のスクリプトで成功する前に、「ワークフローの起動中にエラーが発生しました」と表示されますか?

ねえ、あなたはそうではありません。実装するSchedule_Wkflw.sh.スクリプト1の対応する行に「.」があります。誰ですか購入それ。したがって、別々のプロセスとして実行されず、エラーコードも返されません。 Schedule_Wkflw.sh が終了すると、同じシェルにあるため、最初のスクリプトはすぐに終了します。

したがって、スクリプト 1 では単一のメッセージを受信できません。このメッセージを見たと思いますか?最後のエコーは「cho」を実行するので、とにかくこれは起こりません。

すべてのもののほとんどすべてのパラメータは引用されません。いいえ良いもの。特に$SCRIPTS_PATH。

RET_CODEで0と1を確認してから、他の値のメッセージなしで終了するのはなぜですか?

直接デバッグ用に文書化された別の$ RET_CODEがあります。これはどういう意味ですか?

そのような多くのデバッグ機能が組み込まれている場合は、何が起こるのかを実際に見ることができます。

おすすめ記事