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?

link|improve this question

Are you sure you require changes to the hosts file as opposed to e.g. modifying the host entries via dscl directly? – Daniel Beck Jan 22 at 16:39
I was not aware of the dscl command, I will have to research on that as well. – Lasse V. Karlsen Jan 22 at 18:36
See e.g. here. Internally, OS X uses its directory services, which you can control using dscl, for which /etc/hosts is simply one of the available data sources, providing (of course) hostname/IP address mappings. Setting up a script that writes to dscl and flushes the cache might work better in your situation than keeping multiple copies of the hosts file, or rewriting it all the time. – Daniel Beck Jan 22 at 18:39
@DanielBeck: Good point! I wasn't aware of all the capabilities of dscl. – Karolos Jan 22 at 19:33
Let me know how it works, if you want to try doing it that way. Haven't tried it myself, so I don't post it as an answer. Good luck! – Daniel Beck Jan 22 at 19:35
show 2 more comments
feedback

1 Answer

up vote 4 down vote accepted

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.

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.