作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在无法执行操作时退出脚本。
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."
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/
我是一名优秀的程序员,十分优秀!