linux – 如何通过命令行添加新的DNS服务器?

我正在尝试为OS X编写一个bash脚本,它将更改为当前连接添加名称服务器.我有更改DNS服务器的命令,但我需要保留当前的namesever.

我认为我可以从resolv.conf文件中获取当前的名称服务器,然后在命令中以某种方式使用它.

我目前已将此名称服务器更改为8.8.8.8:

networksetup -setdnsservers AirPort 8.8.8.8

我需要做的是从/etc/resolv.conf中检测当前的名称服务器,然后在上面的命令中使用该值作为参数.例如,说我当前的resolv.conf看起来像这样:

nameserver 9.9.9.9

我希望以上命令执行此操作:

networksetup -setdnsservers AirPort 9.9.9.9,8.8.8.8

有没有办法使用正则表达式从resolv.conf中提取IP,然后以某种方式将其用作networksetup命令中的参数?

解决方法

经过最低限度的测试;为了获得最佳效果,在每个[]中,在括号内添加一个选项卡:

networksetup -setdnsservers AirPort $(sed -ne 's/^[ ]*nameserver[ ]\+\([.:0-9A-Fa-f]\+\)/\1/p' /etc/resolv.conf)

sed表达式从以nameserver开头,后跟IPv4或IPv6地址的行中提取地址. $()构造将sed的输出插入到networksetup的命令行中.

如果/etc/resolv.conf中有可能没有任何名称服务器行,这是一个相对简单的方法:

nameservers=$(sed -ne 's/^[ ]*nameserver[ ]\+\([.:0-9A-Fa-f]\+\)/\1/p' /etc/resolv.conf)
if [ -z "$nameservers" ]; then nameservers=empty; fi
networksetup -setdnsservers AirPort $nameservers

dawei

【声明】:乐山站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。