我有一个脚本调用另一个脚本。
现在,即使第二个脚本失败,它仍然继承原始脚本。
以下是脚本的第一部分:
#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 直接调试。这说明发生了什么?
如果您内置了那么多调试功能,您确实应该能够看到会发生什么。