是否可以跳过执行 bash 命令时的错误?

是否可以跳过执行 bash 命令时的错误?

我正在尝试通过命令从我的 DNS 服务器获取所有主机名的列表:

host -l example-domain.com mydns.com

但是有一台机器的 DNS 名称无效,因为行中有两个连字符,所以我收到错误:

host: 'exa--mple.example-domain.com' is not a legal IDNA2008 name.....

在这种情况下,此命令的执行被中断,我无法获得完整列表。有什么方法可以跳过此错误并获取完整列表吗?或者可能是其他命令?我也尝试过 dig 命令,但存在同样的问题:

dig @mydns.com example-domain.com axfr

类似“try/catch”这样的命令是可以的,但我认为它在 bash 中不存在。我也尝试过根据命令主机手册导出 IDN_DISABLE=1。不幸的是,它对我没有帮助,仍然是同样的错误。我正在使用当前版本的 debian。

答案1

是的,可以使用以下方法将所有发生的错误“发送到垃圾箱”

command > /dev/null 2>&1

或者

command &>/dev/null

欲了解详细信息请访问网络城市或者快速进行谷歌搜索,然后您可能会找到更详细的教程。

答案2

命令是 Bash 语法的一部分,在脚本中必须正确。但你谈论的是这个 Bash 脚本调用的程序的执行结果。$?是最后执行的命令返回的值。您可以使用它在 bash 脚本的以下部分做出决定。不幸的是,根据主持人命令,没有返回有用的代码。

你可以重定向 dig 或 host 命令的输出,并使用以下命令对其进行分析grep或者awk。但您依赖于这些程序输出的确切语法。这些程序的未来版本中可能会更改此语法。

请注意您的问题中的差异。您的主机命令询问的是示例域名.com并且引用的输出与例如--mple.com。此外,最好总是询问绝对域名,即以句点结尾的域名。

答案3

如果您只想要ignore错误(忽略$?值),如何使用......

somecommand || true

...忽略返回代码......?

例如,将每个主机作为字符串传递给xargs(一次一个字符串,使用 xargs-n1标志和 xargs-I标志,其中_是此示例中的替换值。

例如

>echo google.com blahblah123.com | xargs -n1 -I_ host -l _   || true
;; Connection to 192.168.0.1#53(192.168.0.1) for google.com failed: connection refused.
;; Connection to 192.168.0.1#53(192.168.0.1) for blahblah123.com failed: connection refused.

相关内容