如何撤消"set -e"的效果,如果任何命令失败,会立即退出bash?

Tia*_*Cui 193 bash exit

进入set -e交互式bash shell后,如果任何命令退出非零,bash将立即退出.如何撤消此效果?

zwo*_*wol 299

随着set +e.是的,你向后启用 shell选项set -禁用它们set +.历史葡萄干,donchanow.

  • 遗憾的是,Unix shell语言(其中大部分并非特定于'bash')是目前仍在广泛使用的内部最不一致的编程语言之一.你将不得不学习更多这些小疣.我会说那是一个文档错误. (12认同)
  • 历史葡萄是葡萄干地狱! (10认同)
  • 非常感谢,它是相应手册页(http://www.faqs.org/docs/bashman/bashref_56.html)的最后几行,我没有读到最后。 (2认同)
  • 最后,对 Bash 的不公平抨击:单破折号是标准的 POSIX shell 命令行选项,因此最适合“做某事”。`+` 类似于 `-`,但在“≠”中跨越某物意味着“不是”。 (2认同)

sze*_*ryf 63

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

而不是像这样做:

set +e
command_that_might_fail_but_we_want_to_ignore_it
set -e
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

command_that_might_fail_but_we_want_to_ignore_it || true
Run Code Online (Sandbox Code Playgroud)

或者,如果你想保存击键而不介意有点神秘:

command_that_might_fail_but_we_want_to_ignore_it || :
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 想知道`:`的历史,并找到了我的答案[这里](http://stackoverflow.com/a/3224910/1094541),以防其他人好奇. (11认同)
  • 仅当您不关心正在运行的命令的返回代码时,这才适用. (4认同)

mhi*_*tza 19

  • 使用+而不是 - 导致这些标志被关闭.

资源