bash执行整个脚本,但如果任何中间作业失败,则返回退出代码> 0

luc*_*one 3 linux bash shell

我有一个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而不必跟踪每个单独的退出代码手动.

Jac*_*skI 5

您可以捕获错误:

#!/bin/bash

echo "test start."

trap 'rc=$?' ERR

./error.sh
./script2.sh

echo "test done."
return ${rc} 
Run Code Online (Sandbox Code Playgroud)

有关陷阱如何工作的更多信息,请参阅陷阱.