如何处理错误并退出嵌套脚本?

时间:2015-03-25 23:37:40

标签: bash scripting

我有一个unix bash脚本1,它调用脚本2和2调用3A,3B和3C。此外,如果执行任何这些脚本时出现任何错误,我想通过电子邮件发送QA。

假设我想检查3B是否成功运行(如果发生故障则通知QA),我应该在3B中的每个命令之后检查退出代码(这将是很多错误处理),或者我可以检查是否执行从脚本2(即调用者)整体成功的3B是否成功?第一种选择的另一个缺点是我必须退出3次(即3B,2,1)

1 个答案:

答案 0 :(得分:1)

将每个脚本视为一个独立的程序。调用脚本只关心被调用脚本是成功还是失败。因此,每个脚本必须返回准确的退出状态 - 成功时为零,失败时为非零。

script1内,你有:

if script2
then : OK
else mailx -s "script2 failed inside script1" qa@example.com <<< EOM
     exit 1
fi

script2内,你有:

if ! script3A
then mailx -s "script3A failed inside script2" qa@example.com <<< EOM
     exit 1
elif ! script3B
then mailx -s "script3B failed inside script2" qa@example.com <<< EOM
     exit 1
elif ! script3C
then mailx -s "script3C failed inside script2" qa@example.com <<< EOM
     exit 1
else : OK
fi

您可以考虑使用set -e,但是您必须担心如何将电子邮件发送到质量检查。

如果您需要从QA的命令获得标准输出,您必须更加努力。 如果您需要捕获标准错误以发送给QA,那么它将再次变得更难。

如果您确定不需要确切知道失败的内容,则可以简化代码,尤其是在script2内。