set + e的替代方案

时间:2016-08-21 10:11:59

标签: shell

在shell脚本中,这很麻烦:

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

它看起来也容易出错。

有没有更好的方法来做到这一点?

(顺便提一下,答案出现在{em>评论到ReadTimeoutHandler但是,问题和答案尚未出现在StackOverflow上,作为一个正确的问题和答案,据我所知。)

1 个答案:

答案 0 :(得分:2)

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

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

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

顺便提一下,还存在一个false命令,除此之外什么都不做:它总是失败。但是,在某些shell(如Dash)中,false不是内置函数,因此在某些情况下您可能需要将其作为/bin/false或类似函数调用。

注意

导师在2004年教我这种技巧。我怀疑我会自己发现这种技术,因为它对我来说并不明显。一旦人们熟悉了这项技术,该技术既简单又有吸引力。自从学习这项技术以来,我已广泛使用它。你也可以。