gpt4 book ai didi

bash - 如何使 bash 函数在任何错误时返回 1

转载 作者:行者123 更新时间:2023-11-29 09:06:59 24 4
gpt4 key购买 nike

我有一个像这样的假 bash 函数:

has_error() {
true
echo "Ok..."
false
echo "Shouldn't be here!"
}

当我运行这个函数并检查错误状态时,我希望发生什么:

> has_error; echo $?
Ok...
1

但实际上发生了什么:

> has_error; echo $?
Ok...
Shouldn't be here!
0

问题是函数在抛出错误后一直在执行,而且,我什至无法检测到抛出错误。我怎样才能改变这个?我可以在函数的开头放置一个 set -e,但是如果抛出错误,我的整个 shell 将终止。我想要的是简单地让它返回并将退出状态设置为 1。我可以通过将 && 放在命令之间,或者通过在每一行后缀 || 来做到这一点return 1,但这两个都不是很优雅。执行此操作的正确方法是什么?

编辑:

看来我说得不够清楚,因为很多回复似乎都在暗示我实际上并不知道如何在bash中执行测试。正如我上面提到的,我知道我可以手动测试函数中的每个命令,并根据需要返回或处理错误。我还知道我可以 set -e 并导致我的 shell session 因错误而终止。但我要问的是:如果该函数中的任何命令返回非零状态,是否有一种方法可以让函数停止继续执行 - 无需显式测试?

最佳答案

如果您的函数不需要设置任何全局变量,您可以让该函数创建一个使用 set -e 的子 shell。子 shell 将退出,而不是调用 has_error 的 shell。

has_error () (    # "(", not "{"
set -e
true
echo "Ok..."
false
echo "Shouldn't be here!"
)

关于bash - 如何使 bash 函数在任何错误时返回 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30488698/

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