自定义命令失败时在Go中失败

时间:2015-03-02 10:17:15

标签: thoughtworks-go

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

2 个答案:

答案 0 :(得分:4)

在脚本中排列逻辑,以便在脚本失败时退出,并以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 $?

答案 1 :(得分:0)

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

[0]稍微复杂一点-实际上,只有在脚本中未测试命令结果的情况下,命令失败才会退出。请参阅bash手册页,以获取(广泛的)详细信息,具体取决于您的特定平台。

另请参见:“是否有命令中止shell脚本返回非零值?”在https://stackoverflow.com/a/4346420/11638666