Bash - 如何检索 'or' 语句中第一个命令的退出状态
Bash - how to retrieve exit status of first command in an 'or' statement
在 gitlab 的脚本中,我有以下语句:
locust || true
这是因为如果 locust
命令因某些退出代码而失败,我不希望 gitlab CI 停止阶段的执行。但是我怎样才能检索 locust
语句
的退出代码
如果您将命令放在 if
语句中而不是使用 || true
,失败将不会导致脚本退出,您将能够保存退出代码。
if locust; then
rc=0
else
rc=$?
fi
echo locust exited with rc=$rc
PS:您不能只执行 if ! locust; then...
,因为在那种情况下,!
会反转退出代码的逻辑。您实际上需要 else
块才能让 rc=$?
以您想要的方式工作。
PPS:是的,我更喜欢那个答案,rc=0; locust || rc=$?
...我早该想到的!
您可以将 true
替换为变量赋值:
rc=0; locust || rc=$?
如果在设置了 errexit
的上下文中,您希望确保整个 return 代码始终是 0
,即使分配奇迹般地失败了,只是 re-attach || true
:
rc=0; locust || rc=$? || true
更进一步:
如果您希望在第一个命令失败时执行下一个命令而不是文字 true
,则否定 !
变量赋值使其失败,以便继续进行评估第二个 ||
.
# For personal use only!
rc=0; first-cmd || ! rc=$? || next-cmd
但在这里要小心(在逻辑上连接命令时一如既往):不要在生产上下文中使用此快捷方式!而是执行单独的检查以查看是否满足执行该命令的所有先决条件。
回答问题的“蝗虫方面”:如果 运行 完全失败,您可以传递 —exit-code-on-error 0
以仅给出 non-zero 退出代码,而不是响应失败。
(不知道为什么这不是默认设置,但现在更改它会破坏内容,所以我可能不会)
在 gitlab 的脚本中,我有以下语句:
locust || true
这是因为如果 locust
命令因某些退出代码而失败,我不希望 gitlab CI 停止阶段的执行。但是我怎样才能检索 locust
语句
如果您将命令放在 if
语句中而不是使用 || true
,失败将不会导致脚本退出,您将能够保存退出代码。
if locust; then
rc=0
else
rc=$?
fi
echo locust exited with rc=$rc
PS:您不能只执行 if ! locust; then...
,因为在那种情况下,!
会反转退出代码的逻辑。您实际上需要 else
块才能让 rc=$?
以您想要的方式工作。
PPS:是的,我更喜欢那个答案,rc=0; locust || rc=$?
...我早该想到的!
您可以将 true
替换为变量赋值:
rc=0; locust || rc=$?
如果在设置了 errexit
的上下文中,您希望确保整个 return 代码始终是 0
,即使分配奇迹般地失败了,只是 re-attach || true
:
rc=0; locust || rc=$? || true
更进一步:
如果您希望在第一个命令失败时执行下一个命令而不是文字 true
,则否定 !
变量赋值使其失败,以便继续进行评估第二个 ||
.
# For personal use only!
rc=0; first-cmd || ! rc=$? || next-cmd
但在这里要小心(在逻辑上连接命令时一如既往):不要在生产上下文中使用此快捷方式!而是执行单独的检查以查看是否满足执行该命令的所有先决条件。
回答问题的“蝗虫方面”:如果 运行 完全失败,您可以传递 —exit-code-on-error 0
以仅给出 non-zero 退出代码,而不是响应失败。
(不知道为什么这不是默认设置,但现在更改它会破坏内容,所以我可能不会)