2

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

4

2 回答 2

4

安排脚本中的逻辑,以便如果脚本失败,它会以退出代码>= 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 $?
于 2015-03-02T15:28:01.060 回答
0

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

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

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

于 2020-07-23T16:59:32.853 回答