Estou trabalhando em alguns scripts de automação para definir minhas configurações de rede, hospedar conteúdo de arquivos e arquivos /etc/resolver, ao acessar diferentes redes que frequento.
Podem ocorrer algumas combinações que exigem alterações no arquivo hosts, e eu gostaria de evitar ter que configurar uma matriz de combinações diferentes, duplicando as configurações compartilhadas em todo o lugar.
Por exemplo, eu posso estarsobrea rede de trabalho, ou seja. no prédio, ou posso acessá-lo por VPN. Em ambos os casos, preciso adicionar algumas configurações ao arquivo hosts para que a rede funcione corretamente, algumas são compartilhadas, outras não. Além disso, se eu estiver usando VPN, posso estar em casa; nesse caso, há algumas outras configurações no arquivo hosts que eutambémdeseja adicionar.
Como tal, eu esperava que, em vez de criar um arquivo para "casa, acessando o trabalho pela VPN" versus "casa, não acessando o trabalho", etc., existisse uma maneira de incluir outros arquivos?
Por exemplo, digamos que a seguinte sintaxe hipotética funcione:
#!include home.hosts
#!include work.hosts
127.0.0.1 localhost
::1 localhost
Dessa forma, eu poderia simplesmente limpar o conteúdo de um ou de ambos os dois arquivos extras e deixar o resto como está.
Ou, exceto isso, existe uma maneira melhor de fazer isso do que apenas construir um pequeno script que concatena arquivos como esses em um novo arquivo hosts e, como parte da minha configuração de automação, primeiro limpo alguns desses arquivos extras, e então invoco o script para reconstruir o arquivo hosts único a partir desses arquivos extras?
Responder1
Não tenho conhecimento de nenhuma possibilidade de inclusão. O que eu faria, entretanto, é criar seções no meu arquivo hosts e, em seguida, usar um script para comentar as linhas de cada seção usando, por exemplo, sed.
Desta forma, seu arquivo ficaria assim
#%%%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
Editar:Adicionando uma tentativa rápida de modificar os campos.
Removendo o comentário para HOME.HOSTS
sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^#\([^%]\)/\1/g' hosts
Colocando de volta os comentários para HOME.HOSTS
sed -i '/#%%%HOME.HOSTS/,/#%%%/s/^\([^#]\)/#\1/g' hosts
Esta é uma versão básica e precisa ser ajustada às suas necessidades.
Responder2
Como o dscl não está mais funcionando devido à mudança para OpenDirectoryService, uma opção é usar o ghost:
sudo gem install ghost
sudo ghost add fw.test.se 10.0.0.1
... adicionará esta seção no /etc/hosts:
# ghost start
10.0.0.1 fw.start.se
# ghost end
Para limpar a seção #ghost do arquivo hosts, use (isso facilita a substituição da lista de hosts por uma nova):
sudo ghost empty
Você pode encontrar mais informações sobre fantasma aqui: https://github.com/bjeanes/ghost
Responder3
Tive um caso de uso semelhante quando precisei acessar serviços em três locais diferentes usando diferentes configurações de LAN/WAN no arquivo hosts. A resposta de Karolos acima é uma solução possível. Minha abordagem está aqui.
1- ref parahttp://apple.stackexchange.com/q/139267/74657
2- arquivos hosts criados para cada local (hosts.work, hosts.home, hosts.vendor)
3- Usando o script do soloz, aqui (https://github.com/slozo/Network-listener) sempre que me conecto à rede doméstica, executo um script simples para alternar o arquivo hosts.
o método mais simples seria
mv hosts.home /etc/hosts
alternativamente, você pode automatizar a resposta de Karolos acima usando sed para atualizar o arquivo existente ao conectar-se a um SSID específico que você pode detectar e executar facilmente usando o script do soloz mencionado acima.
espero que ajude alguém que se depara com o assunto.