Linux
如何通過命令行附加新的 DNS 伺服器?
我正在嘗試為 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