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