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

使用set-e,是否可以忽略某些命令的错误?[重复]

司空鸿禧
2023-03-14

我有一个bash脚本,我想全局启用set-e。

但是,与其一直禁用它并重新启用它,我想知道是否有一种方法可以有时选择性地禁用错误处理。例如,从systemd运行的命令可以在前面加上一个减号来忽略错误。bash有等效的吗?

e. g.

#!/bin/bash

set -e

WAN_IF=eth2

# Ignore error on next line
tc qdisc del dev ${WAN_IF} root

# I want errors to stop the script on this line
tc qdisc add dev ${WAN_IF} root handle 1: htb default 10

...
etc

由于需要启用/禁用很多,我不想继续执行以下操作:

set +e
tc qdisc del dev ${WAN_IF} root

# I want errors to stop the script on this line
set -e
tc qdisc add dev ${WAN_IF} root handle 1: htb default 10
...

共有2个答案

司业
2023-03-14

| |:对它所做的事情模棱两可。未来的代码读者或未来的你可能会感到困惑。直接回应怎么样:

some_command_allowed_to_fail || (echo "this echo is just to \
    disable the error status" > /dev/null)

(编辑:添加

公良修竹
2023-03-14

| |:(或任何保证不会失败但最简单的操作)添加到命令末尾。

尽管很多人会简单地告诉你,set-e不值得,因为它没有你想象的那么有用(并且会导致类似的问题),手动错误检查是更好的策略。

(我还没有加入那个阵营,尽管我越是遇到这样的问题,我就越觉得有一天我可能会到达那里。)

从另一个人解释set-e主要问题之一的评论中:

set-e的问题不在于您必须小心哪些命令会失败。问题是它不能构成。如果其他人阅读了这篇文章,并在允许失败的情况下使用source yourfile | |:来编写脚本,那么突然间yourfile将不再在任何地方出现错误时停止。甚至在显式的设置-e后的失败行上也没有。

 类似资料:
  • 问题内容: 我正在使用以下选项 在bash脚本中停止执行错误。我有大约100行脚本正在执行,并且我不想检查脚本中每一行的返回码。 但是对于一个特定的命令,我想忽略该错误。我怎样才能做到这一点? 问题答案: 解决方案: 例: 将永远不会打印。 另外,我想补充一点,当打开时,如果管道中的命令之一具有非零退出代码(关闭该命令必须是最后一个),shell认为整个管道具有非零退出代码就足够了。

  • 在插入到mongob中时,我是否可以将写入内容设置为只忽略重复键错误的内容?我想完全忽略这些错误,但仍能抓住其他错误。我特别想知道我是否失去了与数据库的连接,或者mongod本身是否已经崩溃。(我在一个研究网络上,所以这两件事并不总是最可靠的。) 我看到的writeconcern似乎很接近,但尚未得到承认,但我不清楚它到底会捕获什么,以及什么会被忽略。 我的应用程序是用Java编写的,mongo驱

  • 项目中经常会生成一些Git系统不需要追踪(track)的文件。典型的是在编译生成过程中 产生的文件或是编程器生成的临时备份文件。当然,你不追踪(track)这些文件,可以 平时不用"git add"去把它们加到索引中。 但是这样会很快变成一件烦人的事,你发现 项目中到处有未追踪(untracked)的文件; 这样也使"git add ." 和"git commit -a" 变得实际上没有用处,同时

  • 我想知道是否可以使用此方法忽略字段,因为我有一个要忽略的字段列表,在同一个类中,那么我该如何做呢? 我正在使用 谢谢

  • 问题内容: 我有一个Dockerfile。生成映像时,由于以下错误而生成失败: 这实际上是无害的。该库可以很好地构建,但是Docker在收到此错误后会停止构建。有什么办法可以指示Docker忽略这一点? 问题答案: 当然。Docker只是响应shell脚本中返回的错误代码。如果您有以下内容: 您可以将其替换为: 这将始终返回(成功)退出代码。这里的缺点是,你的形象将出现,成功地构筑即使 是 在构建