하위 스크립트가 실패할 때 상위 스크립트를 종료하는 방법

하위 스크립트가 실패할 때 상위 스크립트를 종료하는 방법

다른 스크립트를 호출하는 스크립트가 있습니다.

이제 두 번째 스크립트가 실패하더라도 원본 스크립트에서 계속 상속됩니다.

다음은 스크립트의 첫 번째 부분입니다.

#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$?"가 두 번째 스크립트에 있다고 생각하지 않습니다. 케이스 자체가 $?로 변경될 것으로 예상됩니다.

첫 번째 스크립트에서 힌트를 얻으세요: RET_CODE=$?아무것다른 것.

이 스크립트에서 에코를 볼 수 있나요? 첫 번째 스크립트에서 성공하기 전에 "워크플로 시작 중 오류 발생"이 표시됩니까?

이봐, 넌 아니야구현하다Schedule_Wkflw.sh. 스크립트 1의 해당 줄에 "."이 있습니다. 누구세요구입그것. 따라서 별도의 프로세스로 실행되지 않으며 오류 코드도 반환되지 않습니다. Schedule_Wkflw.sh가 종료되면 동일한 셸에 있기 때문에 첫 번째 스크립트가 즉시 종료됩니다.

따라서 스크립트 1에서는 단일 메시지를 받지 못합니다. 이 메시지를 본 것 같나요? 마지막 에코는 "cho"를 실행하므로 어쨌든 이런 일이 발생하지 않습니다.

모든 것의 거의 모든 매개변수는 인용되지 않습니다.안 돼요좋은것. 특히 $SCRIPTS_PATH.

RET_CODE에서 0과 1을 확인한 다음 다른 값에 대한 메시지 없이 종료하는 이유는 무엇입니까?

직접 디버깅을 위해 문서화된 또 다른 $RET_CODE가 있습니다. 이것은 무엇을 의미 하는가?

그렇게 많은 디버깅 기능이 내장되어 있다면 무슨 일이 일어나는지 실제로 볼 수 있을 것입니다.

관련 정보