当前位置: 首页 > 知识库问答 >
问题:

设置e的替代方案[重复]

陈实
2023-03-14

在外壳脚本中,这很麻烦:

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

它看起来也很容易出错。

难道没有更好的方法吗?

(顺便说一句,答案出现在一个部分相关问题的评论中。但是,据我所知,该问题和答案尚未作为正确的问答出现在StackOverflow上。)

共有1个答案

苏鸿波
2023-03-14

是的,有一种更好的方法,或者至少有一种更惯用、更简洁、更不容易出错的方法。

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

看看它是如何工作的?如果命令允许失败失败,||运算符将控制权传递给true内置。后者除了这个什么也不做:它永远不会失败。

顺便说一句,还有一个false命令,它除了这个之外什么也不做:它总是失败。但是,在某些shell(如Dash)中,false不是内置的,因此在某些情况下,您可能不得不将其作为/bin/false或类似的方式调用。

笔记

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

 类似资料:
  • 问题内容: 以前,我总是以为Vector在长度未知的情况下可以很好地用于非描述对象。据我所知,我也认为它也是线程安全的 有什么改变不应该再使用了,替代方案是什么? 问题答案: 您应该使用而不是。虽然使用了内部同步,但是对于实际的一致性而言,这很少够用,只会在真正不需要时降低执行速度。 另请参阅此stackoverflow问题。

  • 我正在阅读下面Joe Albahari优秀的“C9简而言之”的摘录,并试图理解这里用粗体描述的内容。有人能用我更能理解的方式解释替代方法吗?出于某种原因,这对我来说似乎有些落后。

  • 问题内容: 出于各种原因,在编写 Java应用程序时 ,调用会被皱眉,所以如何通知调用过程并非一切都按计划进行? 编辑: 1是任何非零退出代码的。 问题答案: 当“应用程序”实际上是较大的Java应用程序(服务器)的子应用程序(例如servlet,applet)时,对的使用会被拒绝:在这种情况下,它可能会停止JVM并因此停止所有其他子应用程序。在这种情况下,抛出适当的异常(最好由应用程序框架/服务

  • 问题内容: 我知道这个话题已经解决了上千次。但是我找不到解决办法。 我正在尝试计算列表(df2.list2)的列中出现列表(df1.list1的每一行)的频率。所有列表仅包含唯一值。List1包含约300.000行,list2包含30.000行。 我有一个有效的代码,但是它的运行速度非常慢(因为我使用的是迭代程序)。我也尝试过itertuples(),但它给了我一个错误(“要解压缩的值太多(预期2

  • 允许我填充包含复选框和单选按钮的HTML表单的替代方法。 我已经设法使用eclipse中的HtmlUnit库将数据发送到html表单并检索页面(我已经发布了下面的Java代码)。 然而,当我将这些代码复制到我的Android项目中时,我发现Android不支持HtmlUnit库。 对于Android来说,HtmlUnit还有其他替代方案吗?另一种方法应该能够将文本、复选框、单选按钮填写到Html表

  • 问题内容: 使用hibernate实现联合查询,我必须采取什么替代方法?我知道hibernate状态目前不支持联合查询,现在我看到的建立联合的唯一方法是使用视图表。 另一个选择是使用普通的jdbc,但是这样一来,我将失去所有示例/条件查询功能,以及hibernate对表/列执行的hibernate映射验证。 问题答案: 使用hibernate实现联合查询,我必须采取什么替代方法?我知道hibern