Por que heredocs são “dependentes” dos descritores de arquivos?

0

Eu publico esta pergunta com uma resposta para esclarecer aos novos usuários, porque algumas sintaxes heredoc lidariam com descritores de arquivos; Eu mesmo tive alguns problemas para entender isso no começo.

Veja por exemplo:

bash << EOF0 

    command1
    << E0F1
        Proudly_Printed_With_Heredoc
    EOF1

E0F0

Por que deveria ser algo como:

bash /dev/fd/5 5<< 'EOF0'
    command1
    cat << EOF1 >> /etc/apache2/apache2.conf
        Proudly_Printed_With_Heredoc
    EOF1
EOF0
    
por JohnDoea 21.12.2016 / 00:42

2 respostas

0

É necessário ter uma introdução com todo o conceito de "descritores de arquivo" para entender essa resposta - O que é um "descritor de arquivo" e por que precisamos dele. Se você já tem essa introdução, pule para a resposta abaixo; Não Por favor, leia minha resposta neste tópico da SE, e depois voltar .

Resposta:

Na segunda maneira que apresentei na questão, passamos um heredoc para Bash em um descritor de arquivo diferente de 0 (neste caso - 5:

A primeira parte da frase, bash /dev/fd/5 , representa um bash com o descritor de arquivos 5 como sua entrada, e a segunda parte, 5<< EOF , diz ao shell para escrever o here-doc nesse descritor de arquivo.

Notas:

  1. A hierarquia heredoc não tem nada a ver com o número do descritor de arquivos relevante.
  2. Eu dei o número 5 só porque é um bom número longe de zero. AFAIK, você poderia dar 50, ou 500, ou 50.000, e funcionaria da mesma maneira.
por 21.12.2016 / 00:42
4

Seu primeiro exemplo está faltando cat não precisa de descritores de arquivo.

bash << EOF0 

command1
cat << E0F1
        Proudly_Printed_With_Heredoc
EOF1

E0F0

no entanto descritores de arquivos são necessários se você quiser interagir com alguns dos comandos em vez de fazer com que eles recebam sua entrada do heredoc.

    
por 21.12.2016 / 00:50