如何在脚本失败时退出GitLab作业

28 浏览
0 Comments

如何在脚本失败时退出GitLab作业

我有一个Bash shell脚本,其中包含多个命令。\n如果任何命令返回非零值,我希望shell脚本能自动退出并返回值1。\n是否可以在不显式检查每个命令结果的情况下实现这一点?\n例如,\n

做某事1
如果 [[ $? -ne 0 ]]; then
    退出1
fi
做某事2
如果 [[ $? -ne 0 ]]; then
    退出1
fi

0
0 Comments

问题的出现的原因是:在gitlab的作业中,当脚本执行失败时,需要找到一种方法来退出作业。

解决方法是:

1. 使用以下代码来退出作业:

dosomething1 || exit 1

2. 如果使用了set -e,则需要使用以下代码来执行某些命令:

dosomething || true

3. 使用|| true可以使命令管道具有true返回值,即使命令失败,-e选项也不会终止脚本。

4. 可以使用set -e命令来实现上述功能,这不仅适用于bash脚本,甚至在原始Bourne Shell中也支持。

以上是解决问题的方法,更多关于控制操作符的信息可以在这里找到:opensource.com/article/18/11/control-operators-bash-shell

0
0 Comments

问题的原因:使用set -e时,如果脚本中有管道操作,可能不能正常退出。

解决方法:在set -e之后添加set -o pipefail,以确保在管道操作失败时也能退出。

0
0 Comments

问题原因:当脚本中的某个命令失败时,希望能够立即退出脚本,避免后续命令的执行。

解决方法:在脚本开头添加

set -e

命令,这会导致当简单命令返回非零退出值时,shell会立即退出。简单命令是指不属于ifwhileuntil测试、&&||列表的任何命令。

如果使用的是bash,则可以使用

set -Eeuo pipefail

来处理更多的错误处理。将这些选项视为新的bash程序的合理默认值。可以参考bash手册以了解这些选项的更多信息。

另外,需要注意的是,如果在脚本中声明了函数,那么在函数体内部需要重新声明set -e才能扩展此功能。

此外,如果通过source命令执行脚本,那么shebang行将不起作用。

可以在脚本中稍后使用set +e来禁用错误失败。

需要注意的是,在不同版本的bash中,-e(errexit)行为不一致,如果不熟悉脚本,可能会被管道或if-then语句中的错误所困扰。可以捕获想要捕获的错误,但在复杂的脚本中可能无法捕获每个错误。

如果希望对特定命令设置异常情况,而不使用set -e,是否有办法实现呢?

0