Saya sedang mengerjakan beberapa skrip otomatisasi untuk mengonfigurasi pengaturan jaringan saya, meng-host konten file, dan / etc / resolver file, ketika mengakses jaringan yang berbeda yang sering saya kunjungi.
Ada beberapa kombinasi yang dapat terjadi yang semuanya memerlukan perubahan pada file host, dan saya ingin menghindari mengatur matriks kombinasi yang berbeda, menduplikasi pengaturan bersama di semua tempat.
Misalnya, saya mungkin berada di jaringan kerja, yaitu. di gedung, atau saya dapat mengaksesnya melalui VPN. Dalam kedua kasus, saya perlu menambahkan beberapa pengaturan ke file host agar jaringan berfungsi dengan baik, beberapa dibagikan, beberapa tidak. Selain itu, jika saya menggunakan VPN, saya mungkin berada di rumah, dalam hal ini ada beberapa pengaturan lain dalam file host yang juga ingin saya tambahkan.
Karena itu, saya berharap bahwa alih-alih membuat satu file untuk "rumah, mengakses pekerjaan melalui VPN" vs. "rumah, tidak mengakses pekerjaan", dll., Apakah ada cara bagi saya untuk memasukkan file lain?
Misalnya, katakanlah sintaksis hipotetis berikut berfungsi:
#!include home.hosts
#!include work.hosts
127.0.0.1 localhost
::1 localhost
Dengan cara ini, saya bisa menghapus konten dari satu, atau keduanya, dari dua file tambahan tersebut, dan membiarkan sisanya.
Atau, kecuali itu, apakah ada cara yang lebih baik untuk melakukan ini daripada hanya membuat skrip kecil yang menggabungkan file seperti itu menjadi file host baru, dan sebagai bagian dari pengaturan otomatisasi saya, saya pertama-tama menghapus beberapa file tambahan itu, dan kemudian saya meminta script untuk membangun kembali file host tunggal dari file-file tambahan?
sumber
dscl
langsung?dscl
perintah itu, saya harus meneliti itu juga.dscl
, yang/etc/hosts
merupakan salah satu sumber data yang tersedia, menyediakan (tentu saja) pemetaan nama host / alamat IP. Menyiapkan skrip yang menulis kedscl
dan membersihkan cache mungkin berfungsi lebih baik dalam situasi Anda daripada menyimpan banyak salinan file host, atau menulis ulang sepanjang waktu.Jawaban:
Saya tidak mengetahui adanya kemungkinan penyertaan. Apa yang akan saya lakukan adalah membuat bagian dalam file hosts saya, dan kemudian menggunakan script untuk mengomentari baris di setiap bagian menggunakan, misalnya, sed.
Dengan cara ini file Anda akan terlihat seperti
Sunting: Menambahkan dalam upaya cepat untuk mengubah bidang.
Menghapus komentar untuk HOME.HOSTS
Mengembalikan komentar untuk HOME.HOSTS
Ini adalah versi dasar, dan perlu disesuaikan dengan kebutuhan Anda.
sumber
sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hosts
dan tentang bagian dalam file hosts silakan. Saya benar-benar tidak mengerti mengapa :(sed
untuk menambahkan atau menghapus # di awal baris antara dua baris # %%%. Ini akan mengomentari atau menghapus komentar garis. Contoh tersebut menunjukkan cara untuk mengomentari bagian HOME.HOSTS menggunakan # %%% HOME.HOSTS; Anda harus menggunakan # %%% WORK.HOSTS sebagai gantinya dalam perintah sed untuk mengomentari atau membatalkan komentar pada bagian WORK.HOSTS.Karena dscl tidak lagi berfungsi karena beralih ke OpenDirectoryService, salah satu opsi adalah menggunakan ghost:
... akan menambahkan bagian ini di / etc / hosts:
Untuk menghapus bagian #ghost dari penggunaan file hosts (ini membuatnya mudah untuk mengganti daftar host dengan yang baru):
Anda dapat menemukan informasi lebih lanjut tentang hantu di sini: https://github.com/bjeanes/ghost
sumber
Saya memiliki kasus penggunaan yang sama ketika saya perlu mengakses layanan di tiga tempat yang berbeda menggunakan pengaturan LAN / WAN yang berbeda dalam file hosts. Jawaban Karolos di atas adalah salah satu solusi yang memungkinkan. Pendekatan saya ada di sini.
1- ref ke http://apple.stackexchange.com/q/139267/74657
2- menciptakan file host untuk setiap lokasi (hosts.work, hosts.home, hosts.vendor)
3 - Menggunakan skrip soloz, di sini ( https://github.com/slozo/Network-listener ) setiap kali saya terhubung ke jaringan rumah, saya menjalankan skrip sederhana untuk mengganti file host.
Metode paling sederhana adalah
mv hosts.home /etc/hosts
secara bergantian Anda dapat mengotomatiskan jawaban Karolos di atas menggunakan sed untuk memperbarui file yang keluar saat terhubung ke SSID tertentu yang dapat Anda deteksi dan jalankan dengan mudah dengan menggunakan skrip soloz yang disebutkan di atas.
harapan yang membantu siapa pun tersandung pada masalah ini.
sumber