我有一个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

10-06 05:37
查看更多