如何将参数附加到 xargs 正在执行的命令? (以主机命令为例)

如何将参数附加到 xargs 正在执行的命令? (以主机命令为例)

我正在编写一个 dns 工具并需要“| xargs host”,这可以工作,但是主机命令正在对 /etc/resolv.conf 中配置的 dns 服务器进行查找。

我正在运行一些测试并阅读 xargs 的手册页,但无法弄清楚如何使用 host + xargs 指定 dns 服务器。

前任。

printf "google.com\nyahoo.com\nbing.com\n" > hosts.txt
cat hosts.txt | xargs -n1 host

这将查找 3 个域并输出,但执行查找的 dns 服务器是在 /etc/resolv.conf 下配置的服务器

要使用主机指定 dns 服务器,通常只需将服务器附加到命令末尾:

“托管 google.com 8.8.8.8”

我正在寻找这样的东西:

小样:

server_to_query=8.8.8.8 ; cat hosts.txt | xargs -n1 host [xargs input] $server_to_query

然而,这就是正在发生的事情:

server_to_query=8.8.8.8 ; cat hosts.txt | xargs -n1 host $server_to_query [xargs input]

结果是 $server_to_query 正在针对 [xargs input] 进行查找,而我正在寻找相反的情况发生。

如果我不能用 xargs 做到这一点,我想我可以只使用 for 循环,或使用 dig,但更喜欢使用 xargs 和主机。

答案1

replace-str使用选项-I指定a xargs,它将在命令中的任何位置进行替换,而不是仅将参数放在末尾。

$ echo -e "google.com\nfarrellit.net\nexample.com" | xargs -I % -n 1 host % 8.8.8.8

在 bash / osx 中非常适合我:

Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:

google.com has address 172.217.9.46
google.com has IPv6 address 2607:f8b0:4009:802::200e
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:

farrellit.net has address 99.84.254.112
farrellit.net has address 99.84.254.4
farrellit.net has address 99.84.254.33
farrellit.net has address 99.84.254.62
farrellit.net mail is handled by 10 mail3.farrellit.net.
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:

example.com has address 93.184.216.34
example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946
example.com mail is handled by 0 .

答案2

通常,您想要强制询问哪个名称服务器的原因是当您想要询问多个不同的名称服务器时。

使用 GNU Parallel 您可以执行以下操作:

parallel host {1} {2} :::: hostlist.txt ::: 8.8.8.8 1.1.1.1

要查看结果,请使用--tag

parallel --tag host {1} {2} :::: hostlist.txt ::: 8.8.8.8 1.1.1.1

通常您的主机列表非常大,通过添加-j100您可以并行解析 100 个主机。

相关内容