我有一个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
...
| |:
对它所做的事情模棱两可。未来的代码读者或未来的你可能会感到困惑。直接回应怎么样:
some_command_allowed_to_fail || (echo "this echo is just to \
disable the error status" > /dev/null)
(编辑:添加
将| |:
(或任何保证不会失败但最简单的操作)添加到命令末尾。
尽管很多人会简单地告诉你,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脚本中返回的错误代码。如果您有以下内容: 您可以将其替换为: 这将始终返回(成功)退出代码。这里的缺点是,你的形象将出现,成功地构筑即使 是 在构建