我有一个bash脚本script.sh
,如下所示:
./step1.sh
./step2.sh
./step3.sh
每个step * .h脚本都会返回正确的错误代码,无论它们是否失败。
现在,如果step3.sh失败,我将获得适当的退出代码,但是如果step1.sh或step2.sh失败并且step3.sh成功,则我将获得status = 0,这是不理想的。
我知道我可以用
set -e
在我的脚本顶部,如果任何中间步骤失败,则使脚本失败,但这不是我想要的。
我想知道是否有一个简单的选项可以用来执行每个中间脚本(即使其中一个失败),但是如果其中任何一个失败,则返回退出代码> 0,而不必跟踪每个单独的退出代码手动。
最佳答案
您可以捕获错误:
#!/bin/bash
echo "test start."
trap 'rc=$?' ERR
./error.sh
./script2.sh
echo "test done."
return ${rc}
有关陷阱如何工作的更多信息,请参见trap。