Linux

如何通過命令行附加新的 DNS 伺服器?

  • August 15, 2010

我正在嘗試為 OS X 編寫一個 bash 腳本,它將為目前連接添加一個名稱伺服器。我有更改 DNS 伺服器的命令,但我需要保留目前的名稱。

我的想法是我可以從 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)

該表達式從以單詞開頭後跟 IPv4 或 IPv6 地址的sed行中提取地址。nameserver$()構造將 的輸出插入sed到 的命令行中networksetup

如果有可能沒有任何nameserver行 in /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

引用自:https://serverfault.com/questions/170591