Mac OS X "hosts" file, can I include other files with it?
I am working on some automation scripts to configure my network settings, hosts file contents, and /etc/resolver files, when accessing different networks I frequent between.
There are some combinations that can occur that all require changes to the hosts file, and I'd like to avoid having to set up a matrix of different combinations, duplicating the shared settings all over the place.
For instance, I may be on the work network, ie. in the building, or I may access it over VPN. In both cases, I need to add some settings to the hosts file for networking to work properly, some are shared, some are not. Additionally, if I'm over VPN, I may be at home, in which case there are some other settings in the hosts file I also want to add.
As such, I was hoping that instead of creating one file for "home, accessing work over VPN" vs. "home, not accessing work", etc., is there a way for me to include other files?
For instance, let's say the following hypothetical syntax works:
#!include home.hosts
#!include work.hosts
127.0.0.1 localhost
::1 localhost
This way, I could simply clear out the contents of one, or both, of those two extra files, and leave the rest be.
Or, barring that, is there a better way to do this than to just build a small script that concatenates files such as those into a new hosts file, and as part of my automation setup, I first clear out some of those extra files, and then I invoke the script to rebuild the single hosts file from those extra files?
I am not aware of any include possibility. What I'd do, however, is to make sections in my hosts file, and then use a script to comment the lines in each section using, e.g., sed.
This way your file would look like
#%%%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
Edit: Adding in a quick attempt to modify the fields.
Removing the comment for HOME.HOSTS
sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hosts
Putting back the comments for HOME.HOSTS
sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^\([^#]\)/#\1/g' hosts
This is a basic version, and needs to be adjusted to your needs.