【问题标题】:Alternative to set +e [duplicate]替代 set +e [重复]
【发布时间】:2016-12-28 00:48:00
【问题描述】:

在 shell 脚本中,这很麻烦:

#!/bin/sh -e
# [...]
set +e
command-that-is-allowed-to-fail
set -e
# [...]

它看起来也容易出错。

没有更好的方法吗?

(顺便说一句,答案出现在a partially related question.评论中。但是,据我所知,问题和答案尚未出现在 StackOverflow 上,作为正确的问题和答案。)

【问题讨论】:

  • 感谢您发现重复。我一直找不到它。事实证明,我的问题并不完全相同,因为另一个问题专门针对 Bash。但是,它足够接近以关闭它。

标签: shell


【解决方案1】:

是的,有一种更好的方法——或者,无论如何,有一种更惯用、更简洁、更不容易出错的方法。

#!/bin/sh -e
# [...]
command-that-is-allowed-to-fail || true
# [...]

看看它是如何工作的?如果command-that-is-allowed-to-fail 失败,|| 运算符会将控制权传递给true 内置函数。后者除了这个之外什么都不做:它永远不会失败。

顺便说一句,还有一个false 命令,除了这个之外什么都不做:它总是失败。但是,在某些 shell(如 Dash)中,false 不是内置函数,因此在某些情况下您可能必须将其调用为 /bin/false 等。

注意

一位导师在 2004 年左右教会了我这项技术。我怀疑我自己是否会发现这项技术,因为这对我来说并不明显。然而,一旦人们熟悉了这项技术,它就简单而吸引人。自从学习了这项技术,我已经广泛使用它。你也可以。

【讨论】:

  • 我愿意|| :true 字太长,无法输入。
  • @PSkocik:那怎么样?显然,|| : 甚至可以在 Dash 中使用。所以,12 年后的 2016 年,我仍然可以学到新的东西,谢谢你。如果您选择将您的评论作为答案,我想为它投票。
  • 谢谢,但我不太在乎积分。 true: 完全是同义词,AFAIK,除了 : 在我的系统上没有相应的可执行文件。
猜你喜欢
  • 2018-06-13
  • 2014-03-07
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 2015-02-08
  • 2021-10-10
  • 2017-05-04
  • 2020-01-01
相关资源
最近更新 更多