Android

Bash heredoc

What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179

What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179

Índice:

Anonim

Ao escrever scripts de shell, você pode estar em uma situação em que precisa passar um bloco de texto ou código com sftp para um comando interativo, como tee , cat ou sftp .

No Bash e em outros shells como Zsh, um documento Here (Heredoc) é um tipo de redirecionamento que permite passar várias linhas de entrada para um comando.

A sintaxe da escrita do HereDoc tem o seguinte formato:

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • A primeira linha começa com um comando opcional seguido pelo operador de redirecionamento especial << e o identificador de delimitação.
    • Você pode usar qualquer string como um identificador delimitante, os mais usados ​​são EOF ou END. Se o identificador delimitante não estiver entre aspas, o shell substituirá todas as variáveis, comandos e caracteres especiais antes de passar as linhas do documento aqui para o comando. sinal de menos para o operador de redirecionamento <<- , fará com que todos os caracteres de tabulação iniciais sejam ignorados. Isso permite que você use o recuo ao escrever aqui documentos em scripts de shell. Caracteres em branco à esquerda não são permitidos, apenas a guia.
    O bloco aqui-documento pode conter cadeias, variáveis, comandos e qualquer outro tipo de entrada. A última linha termina com o identificador delimitante. Não é permitido espaço em branco na frente do delimitador.

Exemplos básicos de Heredoc

Nesta seção, veremos alguns exemplos básicos de como usar o heredoc.

Heredoc é mais frequentemente usado em combinação com o comando cat.

No exemplo a seguir, estamos passando duas linhas de texto contendo uma variável de ambiente e um comando para cat usando um documento aqui.

cat << EOF The current working directory is: $PWD You are logged in as: $(whoami) EOF

Como você pode ver na saída abaixo, a variável e a saída do comando são substituídas:

The current working directory is: /home/linuxize You are logged in as: linuxize

Vamos ver o que acontecerá se colocarmos o delimitador entre aspas simples ou duplas.

cat <<- "EOF" The current working directory is: $PWD You are logged in as: $(whoami) EOF

Você pode notar que, quando o delimitador é citado, nenhuma expansão de parâmetro e substituição de comando são feitas pelo shell.

The current working directory is: $PWD You are logged in as: $(whoami)

if true; then cat <<- EOF Line with a leading tab. EOF fi

Line with a leading tab.

Em vez de exibir a saída na tela, você pode redirecioná-la para um arquivo usando os operadores > , >> .

cat << EOF > file.txt The current working directory is: $PWD You are logged in as: $(whoami) EOF

Se o arquivo.txt não existir, ele será criado. Ao usar > o arquivo será substituído, enquanto o >> acrescentará a saída ao arquivo.

A entrada do heredoc também pode ser canalizada. No exemplo a seguir, o comando sed substituirá todas as instâncias do caractere l por e :

cat <<'EOF' | sed 's/l/e/g' Hello World EOF

Heeeo Wored

Para gravar os dados canalizados em um arquivo:

cat <<'EOF' | sed 's/l/e/g' > file.txt Hello World EOF

Usando Heredoc com SSH

O uso do Heredoc é uma das maneiras mais convenientes e fáceis de executar vários comandos em um sistema remoto por SSH.

Ao usar o delimitador não citado, escape de todas as variáveis, comandos e caracteres especiais, caso contrário eles serão interpolados localmente:

ssh -T [email protected] << EOF echo "The current local working directory is: $PWD" echo "The current remote working directory is: \$PWD" EOF

The current local working directory is: /home/linuxize The current remote working directory is: /home/user

Você também pode configurar uma autenticação baseada em chave SSH e conectar-se aos servidores Linux sem inserir uma senha.

Conclusão

Neste guia, você aprendeu o que é heredoc e como usá-lo em seus scripts de shell.

terminal bash