gpt4 book ai didi

shell - 返回 shell 脚本中的最后一个非零返回码

转载 作者:行者123 更新时间:2023-12-02 00:07:34 28 4
gpt4 key购买 nike

我正在运行构建脚本并希望它完成,但如果出现问题则返回非零返回码。到目前为止,我知道的唯一方法是:

command1
rc1=$?

command2
rc2=$?

...

commandn
rcn=$?

exit $rc1 + $rc2 + ... + $rcn

是否有更好的方法来执行此操作,类似于 pipefail 但用于非管道命令?

更新:我实际上并不想要总和(我也不认为这是明智的)- 只是一个非零的错误返回。我正在运行一个脚本,如果出现问题,我希望构建失败,但要完成构建,这样即使某些验证检查失败,我们也可能处于可运行状态。

最佳答案

这可能不是你想要的

您可能不想添加错误代码,因为它们会变得毫无意义。相反,最好在您遇到第一个错误时退出并显示它。

您可以通过将命令与 && operator 链接在一起来完成此操作:

command1 \
&& command2 \
&& command3 \
|| echo "command failed: $?"

例如:

➤ echo show && (exit 188) && echo noshow || echo "failed: $?"
show
failed: 188

如果你必须...

您可以使用一个函数来包装您的命令,该函数将跟踪退出值:

SUM_EXIT=0

wrap() {
eval "$@"
SUM_EXIT=$(($SUM_EXIT+$?))
}

wrap command1
wrap command2
wrap command3

exit $SUM_EXIT

请注意,这是 (IMO) 对 eval 的完全有效使用。您将运行自己编写的命令。请注意可能包含换行符的奇怪文件名和参数。如果您不确定,请完整引用命令:

➤ wrap "(echo \"this is a 
newline containing string\" && exit 5)"
➤ echo $SUM_EXIT
5

关于shell - 返回 shell 脚本中的最后一个非零返回码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17308091/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com