如何撤消“ set -e”的影响,如果有任何命令失败,bash会立即退出?


205

输入set -e交互式bash shell之后,如果有任何非零值退出的命令,bash将立即退出。如何消除这种影响?

Answers:


309

set +e。是的,使用启用 shell选项set -并使用禁用它们是很落后的set +。历史葡萄干,donchanow。


非常感谢,这是我尚未阅读的相应手册页(faqs.org/docs/bashman/bashref_56.html)的最后行。
崔天一

bash手册非常庞大,这是事实。(仅供参考,因为您似乎是新手:单击对您问题的最佳答案下的复选标记是完成的事情,这被称为“接受”。)
zwol

12
可悲的是,Unix shell语言(其中大多数不是特定于'bash'的)是当今仍在广泛使用的内部一致性最低的编程语言之一。您将必须学习更多这些小疣。我会说那是一个文档错误。
zwol

10
历史悠久的葡萄是葡萄干的地狱!
詹姆斯,

2
最后,对Bash进行不公平的抨击:破折号是标准的POSIX Shell命令行选项,因此对于“执行某些操作”最为自然。+就像,-但是越过某物意味着“不”,如“≠”。
西罗Santilli郝海东冠状病六四事件法轮功

68

每次要覆盖它时,使用set +e/ 可能都不方便set -e。我找到了一个更简单的解决方案。

而不是这样做:

set +e
command_that_might_fail_but_we_want_to_ignore_it
set -e

您可以这样做:

command_that_might_fail_but_we_want_to_ignore_it || true

或者,如果您想保存击键操作,又不介意有点晦涩,请执行以下操作:

command_that_might_fail_but_we_want_to_ignore_it || :

希望这可以帮助!


11
想知道的历史:,并在这里找到我的答案,以防其他人感到好奇。
3cheesewheel 2013年

4
仅当您不关心正在运行的命令的返回码时才适用。
艾萨克(Isaac)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.