gpt4 book ai didi

bash - 一个执行函数的衬垫,检查退出状态,如果实际退出代码为 0 或 1,则退出 0

转载 作者:行者123 更新时间:2023-12-02 19:19:28 25 4
gpt4 key购买 nike

我正在运行一个程序,其中 0 或 1 的退出代码表示成功。我在构建 docker 镜像时运行它,所以如果返回码不是 0,则构建失败。如果实际退出代码为 0 或 1,我如何捕获退出代码并强制退出代码为 0,以便 docker 镜像可以正确构建?

我尝试过这样的事情,其中​​ (exit 1) 代表程序:

((exit 1) && if [ $? == 0 || $? == 1]; then exit 0; else exit 1; fi;)


但它不起作用,退出代码 1 仍然以 1 退出。

我宁愿不做 program || true万一程序由于某种原因确实失败了

谢谢!

最佳答案

这里的问题是 exit 0有一个真实的
值,而 exit 1有一个假值。这意味着您的条件的右侧部分仅在第一部分为真时执行(因为 && 运算符)。

如果您的程序以代码 0 退出,则您无事可做。但是,您需要的是将代码 1“转换”为代码 0。为此,||运算符是您所需要的。

这应该有效:

((exit 1) || if [ $? = 1 ]; then exit 0; else exit 1; fi)

一些要检查的测试(我更改了退出代码值以更好地了解正在发生的事情):
$> ((exit 0) || if [ $? = 1 ]; then exit 2; else exit 3; fi); echo $?
0 # the right-part of the condition is ignored
$> ((exit 1) || if [ $? = 1 ]; then exit 2; else exit 3; fi); echo $?
2 # the exit code 1 is "converted" into an exit code 2 (or 0 in your case)
$> ((exit 2) || if [ $? = 1 ]; then exit 2; else exit 3; fi); echo $?
3 # the exit code 2 is "converted" into an exit code 3 (or 1 in your case)

关于bash - 一个执行函数的衬垫,检查退出状态,如果实际退出代码为 0 或 1,则退出 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60932880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com