別のスクリプトを呼び出すスクリプトがあります。
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があります。これはどういう意味ですか?
そのような多くのデバッグ機能が組み込まれている場合は、何が起こるのかを実際に見ることができます。