【问题标题】:Fail build in Go when custom command fails自定义命令失败时在 Go 中构建失败
【发布时间】:2015-03-02 10:17:14
【问题描述】:

我正在使用 Go 的自定义命令来执行 shell 脚本。问题是,如果脚本由于任何原因失败,构建仍然成功。如果我的 shell 脚本出现问题,如何使构建失败?

【问题讨论】:

  • 我的回答对你有用吗?

标签: thoughtworks-go


【解决方案1】:

安排脚本中的逻辑,以便如果脚本失败,它会以exit code >= 1 退出

#!/bin/bash
N=0
#do your logic here and increment N for each failure.
ls /non/existent/dir || { 
    echo "can't ls /non/existent/dir"
    N=$((N+1))
}
#do something else
echo "we had $N errors"
exit N

如果你想快速失败

#!/bin/bash
ls /non/existent/dir || { 
    echo "can't ls /non/existent/dir"
    exit 1
}

对于每个 shell cmd,您可以看到退出代码...

 echo $?

【讨论】:

  • 不错的解决方案,但是...我现在遇到了这个问题,即使我有一个只有 shebang 和 exit 1 的空脚本,它仍然成功...在这台 PC 上有代理,我看到它按预期启动了 CYGWIN 中的脚本,但会不会是这个绕道某处吞噬了退出代码?
【解决方案2】:

最简单的方法是在脚本顶部添加set -e 或将shebang 更改为#!/bin/bash -e-e 将导致 bash 在 any[0] 命令失败后立即退出(出现错误)。顺便说一句,我建议添加 -u 以捕获未定义的变量使用。

[0] 它比这更复杂一些——它实际上只有在命令失败时才退出,如果该命令的结果没有在脚本中测试。请参阅 bash 手册页了解可能因您的特定平台而异的(广泛的)详细信息。

另请参阅:“如果任何命令返回非零值,则中止 shell 脚本?”在https://stackoverflow.com/a/4346420/11638666

【讨论】:

    猜你喜欢
    • 2018-02-18
    • 2021-12-17
    • 1970-01-01
    • 2022-06-29
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 2014-04-03
    相关资源
    最近更新 更多