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
ecocomando Não aceita entrada redirecionada . Se você precisar escrever para a tela, poderá usar ogatocomando, 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.
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