gpt4 book ai didi

bash - 如何在 bash 中退出带有错误消息和错误代码的程序?

转载 作者:行者123 更新时间:2023-12-03 07:40:50 27 4
gpt4 key购买 nike

我想在无法执行操作时退出脚本。

non-existing || exit 1;

工作正常并退出,而

ls || exit 1;

不退出。现在,我还想在退出程序之前添加一条错误消息。

non-existing || echo "Having trouble" && exit 1;

按预期退出,但是

ls || echo "Having trouble" && exit 1;

也退出,尽管不应执行 echo 命令(因此 exit)。

我首先想到使用括号可能会有所帮助:

ls || (echo "Having trouble" && exit 1;)

不退出。但是当我调用一个不存在的程序时,exit-命令只会从我使用方括号打开的子 shell 中退出:

non-existing || (echo "Having trouble" && exit 1;)
echo "Still executed."
  • 如何在 bash 中退出带有错误消息的程序?
  • 为什么 ls || echo "遇到问题"&& exit 1; exit?

最佳答案

您可以使用 { ...; 而不是 (...) 以避免子 shell 和导致的问题并获得您想要的结果。

请注意,在开头 { 和分号等之后有一个空格。和结束 之前的空格是必需的(它们对于 () 是可选的)。

至于为什么 ls || echo && exit 没有执行您期望的答案是因为 ||&& 运算符具有相同的优先级并且是左结合的(请参阅POSIX spec ).

所以当shell看到

ls || echo "Having trouble" && exit 1;

你认为是

ls || { echo "Having trouble" && exit 1; }

但 shell 将其解析为

{ ls || echo "Having trouble"; } && exit 1;

或者,如规范所述:

The operators "&&" and "||" shall have equal precedence and shall be evaluated with left associativity. For example, both of the following commands write solely bar to standard output:

false && echo foo || echo bar

true || echo foo && echo bar

关于bash - 如何在 bash 中退出带有错误消息和错误代码的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33784492/

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