Como usar "Aqui Documentos" em Bash no Linux

Mar 31, 2025
Linux
Fatmawati Achmad Zaenuri / Shutterstock

O mais chamado "Aqui Documentos" permite usar redirecionamento de entrada / saída dentro de scripts de bash no Linux. Eles são uma ótima maneira de automatizar comandos que você precisa para executar em um computador remoto.

Aqui documentos

Muitos comandos no Linux têm dois ou três nomes de letras. Isso é parcialmente o que dá origem à noção de que o Linux é difícil de aprender e cheio de comandos arcanos. Mas um dos nomes mais estranhos do Linux não é um dos crimísticos criminosos. "Aqui documentos" não são documentos, e não é realmente claro o que o "aqui" refere também.

Eles são uma construção relativamente obscura, mas são úteis. Claro, isso é Linux, então há mais de uma maneira para a pele um gato. Algumas das funcionalidades fornecidas por aqui documentos podem ser reproduzidas de outras maneiras. Esses métodos alternativos são geralmente mais complicados. Em programação e script, "mais complicado" também significa "mais propenso a bugs", e que seu código é mais difícil de manter.

Onde aqui documentos realmente Excel está na automação de comandos que você deseja enviar para um computador remoto a partir de uma conexão estabelecida em um script. Fazer a conexão é fácil, mas uma vez que a conexão foi feita, como você "bombeia" seus comandos do seu script no shell no computador remoto? Aqui os documentos permitem que você faça isso simplesmente.

Princípios básicos daqui documentos

A representação idiomática de um documento aqui é assim:

 comando & lt; & lt; limit_string.
 .
 .
texto
dados
variáveis.
.
.
limit_string 
  • COMANDO : Este pode ser qualquer comando linux que aceita entrada redirecionada. Note o eco comando Não aceita entrada redirecionada . Se você precisar escrever para a tela, poderá usar o gato comando, que faz .
  • & lt; & lt; : O operador de redirecionamento.
  • limit_string. : Este é um rótulo. Pode ser o que você gosta, desde que não apareça na lista de dados que você está redirecionando no comando. Ele é usado para marcar o final do texto, dados e variáveis.
  • Lista de dados. : Uma lista de dados a serem alimentados com o comando. Pode conter comandos, texto e variáveis. O conteúdo da lista de dados é alimentado no comando uma linha de cada vez até que o _limit_string seja encontrado.

Você provavelmente verá exemplos de documentos aqui que usam "eof" como a cadeia limite. Nós não favorecemos essa abordagem. Funciona, mas "eof" significa "fim do arquivo". Além do caso raro, onde um documento doméstico é a última coisa em um arquivo de script, "eof" está sendo usado erroneamente.

Ele tornará seus scripts muito mais legíveis se você usar uma cadeia limite que se refere ao que você está fazendo. Se você estiver enviando uma série de comandos para um computador remoto Capsula segura (SSH), uma cadeia limite chamada algo como "_remote_commands" faria sentido perfeito. Você não precisa iniciá-los com um sublinhado " _ " personagem. Fazemos isso porque os marca como algo fora do comum em seu roteiro.

Exemplos simples

Você pode usar documentos aqui na linha de comando e em scripts. Quando você digita o seguinte em uma janela de terminal, você verá um " & gt; "Prompt de continuação de linha toda vez que você acertar" Enter. " Quando você digita a cadeia limite "_end_text" e pressione "ENTER", a lista de sites é passada para gato, e eles são exibidos na janela do terminal.

 CAT & LT; & lt; _end_of_text.
How-to Geek
Revise o Geek
Lifesavvy
Cloudsavvy it.
Mindbounce.
_end_of_text 

Essa não é a mais valiosa dos exercícios, mas demonstra que nada é enviado para o comando até que toda a lista de dados seja coletada e a cadeia limite seja encontrada. o gato O comando não recebe nenhuma entrada até você inserir a seqüência de limite "_end_of_text" e aperte a tecla "Enter".

Nós podemos fazer a mesma coisa em um roteiro. Digite ou copie este exemplo em um editor, salve o arquivo como "heredoc-1.sh" e feche o editor.

 #! / Bin / bash

cat & lt; & lt; "_end_of_text"
Seu nome de usuário é: $ (whoami)
Seu diretório de trabalho atual é: $ PWD
Sua versão bash é: $ Bash_Version
_end_of_text 

Conforme você segue este artigo, cada vez que você cria um script, você precisará torná-lo executável antes de correr. Em cada caso, use o chmod. comando . Substitua o nome do script em cada exemplo para o nome do script usado aqui.

 chmod + x heredoc-1.sh 

Este script contém duas variáveis ​​de ambiente, $ PWD. e $ Bash_version. . Os nomes de variáveis ​​de ambiente são substituídos por seus valores de dados - o diretório de trabalho atual e a versão do Bash - quando o script é executado.

O script também usa Substituição de comando sobre a Quem sou eu comando . O nome do comando é substituído por sua própria saída. A saída de todo o script é gravada na janela do terminal pelo comando CAT. Nós executamos o script chamando-o pelo nome:

 ./ heredoc-1.sh 

Se você modificar o script e enrolar a cadeia limite na primeira linha do documento aqui nas aspas " " ", A lista de dados é passada para o comando aqui documento verbatim. Os nomes de variáveis ​​são exibidos em vez de valores variáveis ​​e a substituição do comando não será realizada.

 #! / Bin / bash

cat & lt; & lt; - "_end_of_text"
Seu nome de usuário é: $ (whoami)
Seu diretório de trabalho atual é: $ PWD
Sua versão bash é: $ Bash_Version
_end_of_text 

Manipulação de caracteres da guia.

Por padrão, os caracteres da tabulação da sua lista de dados serão retidos e gravados na janela do terminal. Copie e salve este exemplo como "heredoc-2.sh". Torná-lo executável usando o chmod. comando. Edite as linhas recuadas para se certificar de que eles têm um ou dois caracteres de tabulação no início da linha, em vez de uma série de espaços.

 #! / Bin / bash

cat & lt; & lt; _end_of_text.
Seu nome de usuário é: $ (whoami)
  Seu diretório de trabalho atual é: $ PWD
    Sua versão bash é: $ Bash_Version
_end_of_text 
 ./ heredoc-2.sh 

As guias são gravadas na janela do terminal.

Adicionando um traço " - "Para o operador de redirecionamento, o documento aqui ignorará os principais caracteres da tabulação. Salve este exemplo como "heredoc-3.sh" e torná-lo executável.

 #! / Bin / bash

cat & lt; & lt; - _end_of_text
Seu nome de usuário é: $ (whoami)
  Seu diretório de trabalho atual é: $ PWD
    Sua versão bash é: $ Bash_Version
_end_of_text 
 ./ heredoc-3.sh 

As abas são ignoradas. Isso pode parecer trivial, mas é uma maneira legal de lidar com as guias líderes devido a seções recuadas de scripts.

Loops e outras construções lógicas são geralmente recuadas. Se o seu documento aqui estiver contido em uma seção recuada de um script, usando um traço " - "Com o operador de redirecionamento remove problemas de formatação causados ​​pelos caracteres de tabulação líderes.

 #! / Bin / bash

se for verdade; então
  cat & lt; & lt; - _limit_string
  Linha 1 com uma guia principal.
  Linha 2 com uma guia principal.
  Linha 3 com uma guia principal.
  _limit_string.
Fi 

Redirecionando para um arquivo

A saída do comando usada com o documento aqui pode ser redirecionada em um arquivo. Use o " & gt; "(Crie o arquivo) ou" & gt; & gt; "(Crie o arquivo se não existir, anexe ao arquivo se ele fizer) operadores de redirecionamento depois de a cadeia limite na primeira linha do documento aqui.

Este script é "heredoc-4.sh". Ele irá redirecionar sua saída para um arquivo de texto chamado "Session.txt".

 #! / Bin / bash

cat & lt; & lt; _end_of_text & gt; session.txt.
Seu nome de usuário é: $ (whoami)
Seu diretório de trabalho atual é: $ PWD
Sua versão bash é: $ Bash_Version
_end_of_text 
 ./ heredoc-4.sh 
 Sessão de gato.Texto 

Tubulação da saída para outro comando

A saída do comando usada em um documento aqui pode ser canalizada como a entrada para outro comando. Usar o cano " | "Operador depois de a cadeia limite na primeira linha do documento aqui. Nós vamos tocar a saída do comando aqui do documento, gato , em sed. . Nos queremos Substitua todas as ocorrências da letra "A" com a letra "e".

Nomeie este script "heredoc-5.sh".

 #! / Bin / bash

cat & lt; & lt; _end_of_text |.. SED 'S / A / E / G'
Quão
Para
Gaak.
_end_of_text 
 ./ heredoc-5.sh 

"Gaak" é corrigido para "geek".

Enviando parâmetros para uma função

O comando que é usado com um documento aqui pode ser uma função no script.

Este script passa alguns dados de veículos em uma função. A função lê os dados como se tivesse sido digitada por um usuário. Os valores das variáveis ​​são então impressos. Salve este script como "heredoc-6.sh".

 #! / Bin / bash

# a função set_car_details ()
set_car_details ()
{
Ler make.
Leia modelo
leia new_used.
Leia o fornecimento_collect.
Ler localização
Leia o preço
}

# O documento aqui que passa os dados para set_car_details ()
set_car_details & lt; & lt; _mars_rover_data.
NASA.
Rover perseverança
Usado
Coletar.
Marte (longo, lat) 77.451865,18.445161
2,2 bilhões
_mars_rover_data.

# Recuperar os detalhes do veículo
echo "fazer: $ fazer"
echo "modelo: $ modelo"
echo "novo ou usado: $ new_used"
echo "entrega ou coleta: $ entrega_collect"
Echo "Local: $ Localização"
echo "Preço \ $: $ Preço" 
 ./ heredoc-6.sh 

Os detalhes do veículo são gravados na janela do terminal.

Criando e enviando um email

Podemos usar um documento aqui para compor e enviar um email. Observe que podemos passar parâmetros para o comando na frente do operador de redirecionamento. Eram usando o Linux. correspondência comando para Envie um email através do sistema de correio local para a conta de usuário chamada "Dave". o -s. (Assunto) Opção nos permite especificar o assunto para o email.

Este exemplo formula script "heredoc-7.sh".

 #! / Bin / bash

Artigo = "Aqui documentos"

Mail 'Status de carga de trabalho' Dave & Lt; & lt; _relatório de Projeto
Nome de usuário: $ (Whoami)
Concluiu a atribuição:
Artigo: $ artigo
_Project_Report 
 ./ heredoc-7.sh 

Não há saída visível deste script. Mas quando checamos nosso e-mail, vemos que o email foi composto, despachado e entregue.

 mail 

Usando aqui documentos com ssh

Aqui documentos são uma maneira poderosa e conveniente de executar alguns comandos em um computador remoto quando uma conexão SSH tiver sido estabelecida. Se você configurou as teclas SSH entre os dois computadores, o processo de login será totalmente automático. Neste exemplo rápido e sujo, você será solicitado a senha para a conta de usuário no computador remoto.

Este script é "heredoc-8.sh". Vamos nos conectar a um computador remoto chamado "Remoto-PC". A conta de usuário é chamada de "Dave". Estamos usando o. -T. (Desativar a opção de alocação pseudo-terminal) porque não precisamos de um pseudo-terminal interativo para serem designados para nós.

Na seção "Faça alguns trabalhos aqui" do script, poderíamos passar uma lista de comandos, e estes seriam executados no computador remoto. Claro, você poderia apenas ligar para um script que estava no computador remoto. O script remoto pode realizar todos os comandos e rotinas que você deseja executar.

Tudo o que nosso script-heredoc-8.sh - vai fazer é atualizar um log de conexão no computador remoto. A conta de usuário e um carimbo de data e hora são registrados em um arquivo de texto.

 #! / Bin / bash

ssh -t [email protected] & lt; & lt; _remote_commands.

# fazer algum trabalho aqui

# atualizar log de conexão
Echo $ User "-" $ (data) & gt; & gt; /home/deve/conn_log/script.log.
_remote_commands 

Quando executamos o comando, somos solicitados a senha para a conta no controlo remoto computador.

 ./ heredoc-8.sh 

Algumas informações sobre o computador remoto são exibidas e somos retornadas ao prompt de comando.

No controlo remoto computador, podemos usar gato Para verificar o log de conexão:

 Cat conn_log / script.log 

Cada conexão é listada para nós.

RELACIONADO: Como criar e instalar chaves ssh do shell Linux

Nome estranho, características puras

Aqui documentos são peculiares, mas poderosos, especialmente quando usados ​​para enviar comandos para um computador remoto. Seria uma questão simples para scriplar uma rotina de backup usando rsync. . O script poderia então se conectar ao computador remoto, verifique o espaço de armazenamento restante e envie um email de alerta se o espaço estava ficando baixo.

RELACIONADO: Como fazer backup do seu sistema Linux com rsync


Linux - Artigos mais populares

Como recuperar arquivos excluídos no Linux com o TestDisk

Linux Nov 18, 2024

Fatmawati Achmad Zaenuri / Shutterstock Você já excluiu um arquivo e lamentou instantaneamente? Você precisa de volta e rápido! Mas e se o arquivo for tão..


Como usar o Shell restrito para limitar o que um usuário do Linux pode fazer

Linux Mar 25, 2025

Fatmawati Achmad Zaenuri / Shutterstock Um shell restrito limita o que uma conta de usuário pode fazer no Linux. Um usuário restrito não pode alterar seu ..


O que há de novo no Ubuntu 21.04 ‘Hirsuto Hippo’

Linux Apr 22, 2025

A nova versão de Ubuntu 21.04. , o hipopótamo Hirsute, foi lançado em 22 de abril de 2021. É um lançamento provisório da popular distribuição do Linux, com apenas nove..


O que há de novo no GNOME 40?

Linux Jul 23, 2025

Fundação Gnome. O GNOME 40 tem mais que um novo esquema de numeração. Junto com seu novo visual vem uma nova maneira de trabalhar. As antigas metáforas ..


O que há de novo no sistema elementar "Odin"

Linux Aug 14, 2025

Elementary, Inc. Existem muitas distribuições do Linux. (Distros) que as pessoas afirmam que são boas substituições para Windows ou MacOS. Mas há pouco..


KDE Connect está finalmente chegando ao iphone

Linux Oct 26, 2025

KDE. Se você está procurando uma maneira fácil de fazer o seu iPhone jogar nice com o seu KDE Desktop hoje é o seu dia de sorte, como KDE Connect est..


Este novo laptop de jogos Linux tem as especificações para executar qualquer coisa

Linux Oct 20, 2025

Juno Computadores. O Linux e o Gaming estão começando a se unir muito mais ultimamente. o Deck de vapor está a caminho com o Linux instalado, e Juno acaba..


Como atualizar o Fedora Linux

Linux Nov 10, 2024

Então, você finalmente baixou e instalou o Fedora Linux, mas agora você pode estar se perguntando, como você mantém seu sistema atualizado? Felizmente, o Fedora oferece alguns método..


Categorias