【问题标题】:Returning different exit code than what command returns in bash script返回与 bash 脚本中返回的命令不同的退出代码
【发布时间】:2021-09-01 14:05:51
【问题描述】:

我有一个 bash 脚本,它运行一些在某些用例上返回错误代码 137 的工具。 我将此脚本用作我的 CI 管道的一部分,就我而言,这是成功的状态。 我的问题是如何捕获此退出代码并返回 0 的退出代码(如陷阱命令,仅我认为它不支持自定义退出代码,仅支持预定义的退出代码)。

提前致谢, 阿隆

【问题讨论】:

    标签: bash exit-code


    【解决方案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的部分答案:stackoverflow.com/questions/26675681/…
    • 问题是我不能使用它,因为我在我的脚本中使用了“set -e”(因为它在 CI 管道中,我希望每个不是 137 的故障都会使管道失败) . trap 命令非常适合使用 SIGINT 或 SIGTERM 等预定义信号来处理它,这次我想处理某个工具返回的自定义退出代码。
    • @AlonTsaraf 将此答案的代码放入新的 Bash 脚本中,在顶部添加 set +e 以暂时禁用此脚本中的 set -e,然后从主脚本调用此包装脚本,而不是真正的命令。
    猜你喜欢
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    相关资源
    最近更新 更多