自定义命令失败时在 Go 中构建失败
Fail build in Go when custom command fails
我正在使用 Go 的自定义命令来执行 shell 脚本。问题是,如果脚本因任何原因失败,构建仍然会成功。如果我的 shell 脚本出现问题,我该如何使构建失败?
安排脚本中的逻辑,以便在脚本失败时以 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 $?
最简单的方法是在脚本顶部添加 set -e
或将 shebang 更改为 #!/bin/bash -e
。 -e
将导致 bash 在任何 [0] 命令失败后立即退出(出现错误)。顺便说一句,我建议添加 -u
以及捕获未定义的变量使用。
[0] 它比这稍微复杂一点——它实际上仅在命令失败且脚本中未测试该命令的结果时退出。请参阅 bash 手册页了解(广泛的)详细信息,这些详细信息可能因您的特定平台而异。
另请参阅:“如果任何命令 returns 为非零值,则中止 shell 脚本?”在
我正在使用 Go 的自定义命令来执行 shell 脚本。问题是,如果脚本因任何原因失败,构建仍然会成功。如果我的 shell 脚本出现问题,我该如何使构建失败?
安排脚本中的逻辑,以便在脚本失败时以 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 $?
最简单的方法是在脚本顶部添加 set -e
或将 shebang 更改为 #!/bin/bash -e
。 -e
将导致 bash 在任何 [0] 命令失败后立即退出(出现错误)。顺便说一句,我建议添加 -u
以及捕获未定义的变量使用。
[0] 它比这稍微复杂一点——它实际上仅在命令失败且脚本中未测试该命令的结果时退出。请参阅 bash 手册页了解(广泛的)详细信息,这些详细信息可能因您的特定平台而异。
另请参阅:“如果任何命令 returns 为非零值,则中止 shell 脚本?”在