O que exatamente é echo '[local] \ nlocalhost \ n' / etc?

1
RUN echo '[local]\nlocalhost\n' > /etc/ansible/hosts

Esta linha está no meu dockerfile e suponho que apenas significa adicionar localhost ao arquivo ansible / hosts?

Alguém pode detalhar o que [local] \ nlocalhost \ n é um pouco mais detalhado?

    
por david 16.11.2016 / 21:51

2 respostas

2

Esta linha informa ao Docker para executar o comando shell: echo '[local]\nlocalhost\n' > /etc/ansible/hosts

Esse comando shell irá imprimir o seguinte bloco de texto no arquivo /etc/ansible/hosts :

[local]
localhost

Ele faz isso porque \n é o caractere de "nova linha", sinalizando o início de uma nova linha de texto. Isso significa que echo foi instruído a fazer o seguinte: imprimir o texto [local] , iniciar uma nova linha, imprimir localhost e, finalmente, iniciar outra nova linha. Essa saída é redirecionada usando o caractere > especial e o destino após o redirecionamento é especificado como /etc/ansible/hosts . Embora esse arquivo possa não ter uma extensão .txt , você pode considerá-lo como um arquivo de texto simples.

Esse arquivo é provavelmente especificado porque é usado pelo Ansible para se comunicar com diferentes hosts (neste caso, localhost) através do seu inventário funcionalidade .

Então, sim, você estava essencialmente correto - isso adiciona localhost ao arquivo de hosts Ansible. Vale a pena notar que este comando irá sobrescrever qualquer arquivo existente em /etc/ansible/hosts .

    
por 16.11.2016 / 22:21
1

A linha em questão:

RUN echo '[local]\nlocalhost\n' > /etc/ansible/hosts

parece executar o comando echo e usar o caractere de redirecionamento do shell > para enviar a saída do comando echo para o arquivo /etc/ansible/hosts .

Duas coisas a serem observadas aqui:

  • No comando echo , a sequência \n representa um caractere de nova linha (tecla Enter ). Portanto, [local] e localhost estão realmente sendo ecoados no arquivo em linhas consecutivas. Isso corresponde ao formato adequado para uma sub-rotina em /etc/ansible/hosts , conforme descrito aqui . (Eu não sei o suficiente sobre ansible para dizer-lhe porque o hostname localhost é usado aqui em vez do endereço IP 127.0.0.1 .)

  • O caractere de redirecionamento do shell > substituirá (isto é, apagará e substituirá) o conteúdo de /etc/ansible/hosts em vez de acrescentar este novo sub-rotina ao final do arquivo. (Para redirecionar e anexar a um arquivo, você usaria >> ).

por 16.11.2016 / 22:01