當訪問我經常訪問的不同網路時,我正在編寫一些自動化腳本來配置我的網路設定、主機文件內容和 /etc/resolver 文件。
可能會出現一些組合,所有組合都需要更改主機文件,我想避免必須設置不同組合的矩陣,從而在各處複製共享設置。
例如,我可能是在工作網絡,即。在大樓裡,或者我可以透過 VPN 存取它。在這兩種情況下,我都需要向主機檔案添加一些設定以使網路正常工作,有些設定是共享的,有些則不是。此外,如果我透過 VPN,我可能在家,在這種情況下,主機檔案中還有一些其他設置也想要添加。
因此,我希望不是為“家庭,透過 VPN 訪問工作”與“家庭,不訪問工作”等創建一個文件,而是有一種方法可以包含其他文件嗎?
例如,假設以下假設語法有效:
#!include home.hosts
#!include work.hosts
127.0.0.1 localhost
::1 localhost
這樣,我可以簡單地清除這兩個額外文件中的一個或兩個的內容,並保留其餘文件。
或者,除此之外,有沒有更好的方法來做到這一點,而不是僅僅建立一個小腳本,將這些文件連接到一個新的主機文件中,並且作為我的自動化設定的一部分,我首先清除其中一些額外的文件,然後我調用腳本從這些額外的文件重建單個主機文件?
答案1
我不知道有任何包含的可能性。然而,我要做的是在主機文件中建立一些部分,然後使用腳本來註釋每個部分中的行,例如使用 sed。
這樣你的文件看起來就像
#%%%HOME.HOSTS%%%
#Put here the contents of home.hosts
#%%%WORK.HOSTS%%%
#Put here the contents of work.hosts
#%%%ALWAYS_ON%%%
127.0.0.1 localhost
::1 localhost
編輯:新增快速嘗試修改字段。
刪除 HOME.HOSTS 的註釋
sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hosts
放回 HOME.HOSTS 的評論
sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^\([^#]\)/#\1/g' hosts
這是一個基本版本,需要根據您的需求進行調整。
答案2
由於切換到 OpenDirectoryService,dscl 不再工作,一個選項是使用 Ghost:
sudo gem install ghost
sudo ghost add fw.test.se 10.0.0.1
...將在 /etc/hosts 中新增此部分:
# ghost start
10.0.0.1 fw.start.se
# ghost end
若要清除主機檔案的 #ghost 部分,請使用(這樣可以輕鬆地將主機清單替換為新主機清單):
sudo ghost empty
您可以在這裡找到有關幽靈的更多資訊: https://github.com/bjeanes/ghost
答案3
當我需要使用主機檔案中的不同 LAN / WAN 設定存取三個不同位置的服務時,我有一個類似的用例。卡羅洛斯上述的回答是一個可能的解決方案。我的方法就在這裡。
1- 參考http://apple.stackexchange.com/q/139267/74657
2-為每個位置建立主機檔案(hosts.work、hosts.home、hosts.vendor)
3-使用soloz的腳本,這裡(https://github.com/slozo/Network-listener)每當我連接到家庭網路時,我都會執行簡單的腳本來切換主機檔案。
最簡單的方法是
mv hosts.home /etc/hosts
或者,您可以使用 sed 自動執行上述 Karolos 的回答,以更新連接到特定 SSID 時的現有文件,您可以使用上面提到的 soloz 腳本輕鬆檢測和運行該文件。
希望這對任何偶然發現該主題問題的人有所幫助。