子脚本失败时如何退出父脚本失败

子脚本失败时如何退出父脚本失败

我有一个脚本调用另一个脚本。

现在,即使第二个脚本失败,它仍然继承原始脚本。

以下是脚本的第一部分:

#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 无法正确执行,父脚本将给出 exit 0。

我认为父脚本执行的返回码

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

总是给出 0,这就是它出现在 Exit 0 的原因。

任何人都可以建议一种正确处理此问题的方法吗?

答案1

我不相信那个“案例$?”在第二个脚本中。我怀疑案件本身会改变$?

从第一个脚本中获取提示:RET_CODE=$?在你做之前任何事物别的。

您能看到该脚本中的任何一个回声吗?在第一个脚本中明显成功之前,它是否显示“启动工作流程时出错”?

嘿,你不是执行Schedule_Wkflw.sh。有一个“。”在脚本 1 的那一行。你是采购它。因此它不会作为单独的进程运行,甚至不会返回错误代码。当 Schedule_Wkflw.sh 点击退出时,它会立即退出第一个脚本,因为它位于同一个 shell 中。

因此,您不会从脚本 1 中得到任何一条消息。您认为您看到了这些消息吗?最后一个回声运行“cho”,所以无论如何都不会发生这种情况。

几乎所有内容的每个参数都没有被引用,即绝不一件好事。特别是$SCRIPTS_PATH。

为什么要检查 RET_CODE 的 0 和 1,然后在没有任何其他值的消息的情况下退出?

还有另一个记录的 $RET_CODE 直接调试。这说明发生了什么?

如果您内置了那么多调试功能,您确实应该能够看到会发生什么。

相关内容