Como usar o heredoc em script de shell
- 2900
- 272
- Enrique Gutkowski PhD
Aqui documento (Heredoc) é um literal de fluxo de entrada ou arquivo que é tratado como um bloco especial de código. Este bloco de código será passado para um comando para processamento. Heredoc origina em Unix conchas e pode ser encontrado em conchas populares Linux como SH, TCSH, KSH, BASH, ZSH, CSH. Notavelmente, outras linguagens de programação, como Perl, Ruby, PHP, também suportam Heredoc.
Estrutura de Herdoc
Heredoc usa 2 suportes de ângulo (<<)
seguido por a Token de delimitador. O mesmo token delimitador será usado para encerrar o bloco de código. O que quer que esteja dentro do delimitador é considerado um bloco de código.
Veja o exemplo abaixo. Estou redirecionando o bloco de código para o comando CAT. Aqui o delimitador está definido como “BLOQUEAR”E encerrado pelo mesmo“BLOQUEAR““.
gato << BLOQUEAR Hello World Today Data é $ (data +%f) meu diretório doméstico = $ home BLOQUEAR
OBSERVAÇÃO: Você deve usar o mesmo token delimitador para iniciar o bloco e encerrar o bloco.
Crie comentários multilinas
Se você está codificando em algum momento em Bash agora, pode saber Bash por padrão não suporta comentários multilinas como C ou Java. Você pode usar Heredoc para superar isso.
Este não é um recurso interno do Bash suportando comentários de várias linhas, mas apenas um hack. Se você não está redirecionando heredoc Para qualquer comando, o intérprete simplesmente lerá o bloco de código e não executará nada.
<< COMENTE Esta é a linha de comentários 1 Esta é a linha de comentários 2 Esta é a linha de comentários 3 COMENTEComentários multilinas
Lidar com espaços brancos
Por padrão, heredoc não suprimirá nenhum caractere do espaço branco (guias, espaços). Podemos substituir esse comportamento adicionando traço (-)
depois (<<)
seguido por um delimitador. Isso suprimirá todos os espaços de guias, mas os espaços brancos não serão suprimidos.
gato <<- BLOCK This line has no whitespace. This line has 2 white spaces at the beginning. This line has a single tab. This line has 2 tabs. This line has 3 tabs. BLOCKEspaços de manuseio
Variável e substituição de comando
Heredoc aceita substituição variável. Variáveis podem ser variáveis definidas pelo usuário ou variáveis ambientais.
Hoje = $ (data +%f) gato << BLOCK1 # User defined variables Today date is = $TODAY #Environ Variables I am running as = $USER My home dir is = $HOME I am using $SHELL as my shell BLOCK1
Da mesma forma, você pode executar quaisquer comandos dentro do heredoc bloco de código.
gato << BLOCK2 $(uname -a) BLOCK2Variável e substituição de comando
Escapar de personagens especiais
Existem várias maneiras de escapar de personagens especiais. Ou você pode fazer isso no nível do personagem ou no nível do documento.
Para escapar de caracteres especiais individuais, use um barragem (\).
gato << BLOCK4 $(uname -a) BLOCK4 cat << BLOCK5 Today date is = $TODAY BLOCK5
Para escapar de todos os caracteres especiais dentro do bloco, cercam o delimitador com citações únicas, citações duplas ou delimitador de prefixo com uma barra de barriga.
gato << 'BLOCK1' I am running as = $USER BLOCK1 cat << "BLOCK2" I am running as = $USER BLOCK2 cat << \BLOCK3 I am running as = $USER BLOCK3Escapar de personagens especiais
Agora que conhecemos a estrutura de heredoc E como funciona, vamos ver alguns exemplos. Duas áreas comuns onde eu uso heredoc estão executando um bloco de comandos sobre o SSH e passando por consultas SQL através heredoc.
No exemplo abaixo, estamos tentando executar um bloco de código em um servidor remoto através do SSH.
Executando comandos sobre SSHNo exemplo abaixo, estou passando um Selecione declaração para PSQL para conectar -se a um banco de dados e executar a consulta. Esta é uma maneira alternativa de executar uma consulta em PSQL script bash interno em vez de usar o -f
bandeira para executar .SQL arquivo.
#!/usr/bin/Env bash uname = pósgres dbname = testando psql --username = $ uname - -password -dbname = $ dbName << BLOCK SELECT * FROM COUNTRIES WHERE region_id = 4; BLOCKExecutando a consulta SQL
É isso para este artigo. Há muito mais que você pode fazer com heredoc comparado ao que mostramos nos exemplos. Se você tem algum truque útil com heredoc Por favor, poste -o na seção de comentários para que nossos leitores possam se beneficiar disso.
- « Como instalar o Terraform em distribuições Linux
- Como instalar o Chef Workstation em Rhel e Centos 8/7 »