다른 스크립트를 호출하는 스크립트가 있습니다.
이제 두 번째 스크립트가 실패하더라도 원본 스크립트에서 계속 상속됩니다.
다음은 스크립트의 첫 번째 부분입니다.
#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가 있습니다. 이것은 무엇을 의미 하는가?
그렇게 많은 디버깅 기능이 내장되어 있다면 무슨 일이 일어나는지 실제로 볼 수 있을 것입니다.