Cómo usar Heredoc en Bash en Linux

27 feb 2021 3 min di lettura
Cómo usar Heredoc en Bash en Linux
Indice dei contenuti

Introducción

Al escribir scripts de shell, puede encontrarse en una situación en la que necesite pasar un bloque de líneas de texto o código a un comando interactivo, como tee, cat o sftp.

En Bash y otros shells como Zsh, un documento Here (Heredoc) es un tipo de redireccionamiento que le permite pasar múltiples líneas de entrada a un comando.

La sintaxis del script HereDoc tiene la siguiente forma:

[COMMAND] <<[-] 'DELIMITER'
 HERE-DOCUMENT
 DELIMITER
  • La primera línea comienza con un comando opcional seguido del operador de redireccionamiento especial << y el identificador del delimitador.
  • Se puede utilizar cualquier cadena como identificador delimitador, los más utilizados son EOF o END.
  • Si el delimitador no está entre comillas, el shell sustituirá todas las variables, comandos y caracteres especiales antes de pasar las líneas del documento aquí al comando.
  • Al agregar un signo menos al operador de redireccionamiento <<-, se ignorarán todos los caracteres de las pestañas principales. Esto le permite usar sangría al escribir documentos aquí en scripts de shell. No se permite el espacio en blanco principal, solo la pestaña.
  • El bloque here-document puede contener cadenas, variables, comandos y cualquier otro tipo de entrada.
  • La última línea termina con el identificador delimitador. No se permiten espacios en blanco delante del delimitador.

Ejemplos básicos de Heredoc

En esta sección, veremos algunos ejemplos básicos de cómo usar la herencia.

Heredoc se usa a menudo junto con el comando cat.

En el siguiente ejemplo, estamos pasando dos líneas de texto que contienen una variable de entorno y un comando a cat usar un documento aquí.

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

Como puede ver en la siguiente salida, tanto la salida variable como la salida del comando se sustituyen:

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

Veamos qué sucederá si encerramos el delimitador entre comillas simples o dobles.

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

Se puede ver que cuando se cita el delimitador, el shell no realiza la expansión de parámetros ni la sustitución de comandos.

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

Si está usando un heredoc dentro de una declaración o bucle, use el operador de redireccionamiento <<- que le permite sangrar su código.

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

En lugar de mostrar la salida en la pantalla, puede redirigir a un archivo usando los operadores >, >>

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

Si el archivo.txt no existe, se creará. Cuando si usa > el archivo se sobrescribirá, mientras que con el operador >> la salida se agregará al archivo.

La entrada Heredoc también se puede transportar. En el siguiente ejemplo, el sed reemplazará todas las instancias del carácter l con e:

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

Para escribir los datos enviados en un archivo:

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

Usando Heredoc con SSH

El uso de Heredoc es una de las formas más convenientes y fáciles de ejecutar múltiples comandos en un sistema remoto a través de SSH.

Cuando utilice el delimitador sin comillas, asegúrese de evitar todas las variables, comandos y caracteres especiales; de lo contrario, se interpolarán 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/noviello
 The current remote working directory is: /home/user

También puede configurar la autenticación basada en claves SSH y conectarse a servidores Linux sin ingresar una contraseña.

Conclusión

En esta guía, aprendió qué heredoc y cómo usarlo en scripts de shell.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.