我正在尝试通过命令从我的 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.