返回与 bash 脚本中返回的命令不同的退出代码
Posted
技术标签:
【中文标题】返回与 bash 脚本中返回的命令不同的退出代码【英文标题】:Returning different exit code than what command returns in bash script 【发布时间】:2021-09-01 14:05:51 【问题描述】:我有一个 bash 脚本,它运行一些在某些用例上返回错误代码 137 的工具。 我将此脚本用作我的 CI 管道的一部分,就我而言,这是成功的状态。 我的问题是如何捕获此退出代码并返回 0 的退出代码(如陷阱命令,仅我认为它不支持自定义退出代码,仅支持预定义的退出代码)。
提前致谢, 阿隆
【问题讨论】:
【参考方案1】:在脚本中运行命令/工具后:
command
您可以查看退出代码并根据该返回执行一些逻辑:
command
return=$?
if [ $return -eq 137 ]; then
exit 0
else # @chepner's very good suggestion
exit $return
fi
如果您运行的命令(您的工具)返回的退出代码为 137,那么您的 bash 脚本将以退出代码 0 结束。
【讨论】:
确保在else
子句中有明确的exit $return
。否则,之前脚本的退出状态是由command
的退出状态隐式设置的,现在退出状态将是if
的退出状态。
如果您想控制脚本的退出状态,请不要使用set -e
。
查看set -e
的部分答案:***.com/questions/26675681/…
问题是我不能使用它,因为我在我的脚本中使用了“set -e”(因为它在 CI 管道中,我希望每个不是 137 的故障都会使管道失败) . trap 命令非常适合使用 SIGINT 或 SIGTERM 等预定义信号来处理它,这次我想处理某个工具返回的自定义退出代码。
@AlonTsaraf 将此答案的代码放入新的 Bash 脚本中,在顶部添加 set +e
以暂时禁用此脚本中的 set -e
,然后从主脚本调用此包装脚本,而不是真正的命令。以上是关于返回与 bash 脚本中返回的命令不同的退出代码的主要内容,如果未能解决你的问题,请参考以下文章