O Que É um Here-Document? Entrada Multilinha Inline
Um here-document é um recurso do shell que alimenta um bloco de texto inline e multilinha a um comando como sua entrada padrão, usando o delimitador <<.
Quando você precisa passar várias linhas de texto a um comando, digitá-las um echo de cada vez é desajeitado. Um here-document permite embutir um bloco inteiro de texto diretamente no script e canalizá-lo para um comando como stdin. Scripts de CI usam here-docs para escrever arquivos de config, alimentar SQL a um banco de dados ou construir mensagens multilinha.
O que é um here-document
Um here-doc começa com << seguido de uma palavra delimitadora, depois linhas de texto, e termina quando esse delimitador aparece sozinho em uma linha. Todas as linhas no meio são enviadas como stdin ao comando.
Um exemplo básico
Escrever cat <<EOF > config.txt depois várias linhas depois EOF cria um arquivo com exatamente aquelas linhas. O texto entre os marcadores se torna a entrada para cat, que o escreve.
Expansão e aspas
- Por padrão, variáveis e command substitutions dentro de um here-doc são expandidas.
- Colocar o delimitador entre aspas, como
<<'EOF', desativa a expansão para que o texto fique literal. - Use
<<-EOFpara remover tabs à esquerda para uma indentação mais limpa.
Here-doc versus here-string
Um here-document fornece múltiplas linhas; uma here-string, escrita <<<, fornece uma única string. Ambos alimentam stdin sem um arquivo separado, mas here-docs são para blocos de texto.
Here-documents no CI
Scripts de CI usam here-docs para gerar arquivos de config inline ou rodar SQL de múltiplas instruções contra um serviço. Cuidado com as aspas: um delimitador sem aspas expandirá referências $, o que pode quebrar templates ou vazar secrets para um arquivo.
Gerando arquivos em runners gerenciados
Nos runners da Latchkey, um here-doc é uma forma organizada de escrever uma config ou script durante um passo sem versioná-lo no repo. Coloque o delimitador entre aspas quando o conteúdo deve permanecer literal, especialmente se contiver placeholders de secret.
Principais conclusões
- Um here-document alimenta um bloco de texto inline a um comando como stdin.
- Ele começa com
<<DELIMe termina quando DELIM aparece sozinho em uma linha. - Colocar o delimitador entre aspas desativa a expansão de variáveis para conteúdo literal.