Cómo crear bloques multilínea en bash con Heredoc

Cómo crear bloques multilínea en bash con Heredoc.

Heredoc (Here-document), es una curiosa (y poco conocida) forma de imprimir cadenas de caracteres multilínea, en un formato similar al original.

Si tomamos como ejemplo el intérprete de comandos bash, ya vimos en el anterior articulo que no se permite escribir comentarios multilínea. Con Heredoc si podemos, y eso precisamente es lo que vamos a ver en este articulo de hoy ademas de otros ejemplos de uso.

 

Crear bloques multilínea en bash con Heredoc

Lo primero que haremos es conocer la sintaxis de Heredoc, a continuación trataremos unos ejemplos de uso y para concluir conocemos Heredoc con ssh.

Sintaxis de Heredoc

La sintaxis básica de Heredoc es como te indico a continuación.

[COMMAND] <<[-] 'DELIMITER'
  HERE-DOCUMENT
DELIMITER

La primera línea comienza con un comando opcional (no obligatorio), seguido por el operador de redirección especial <<, y el identificador delimitador.
  • Como identificador delimitador puedes usar cualquier cadena, aunque las más comunes son EOF y END.
  •  Si no incluyes entre comillas el identificador delimitador, el shell sustituye las variables, comandos y caracteres especiales antes de pasar las líneas de caracteres al comando.
  • Si quieres usar una sangría al imprimir las líneas de caracteres, ignorando las tabulaciones originales. Debemos añadir el símbolo menos al operador de redirección, ejemplo: <<- .

En los bloques multilínea se pueden incluir, cadenas, variables, comandos o cualquier otro tipo de entrada.

La última línea siempre debe terminar con el identificador delimitador (no se permiten espacios en blanco).

 

Ejemplos de Heredoc

En el primer ejemplo nos ayudamos del comando cat, además imprimimos dos líneas que se completan con variables de entorno.

cat << EOF
El directorio actual es: $PWD
Has iniciado sesion como: $(whoami)
EOF

ejemplo de salida…

sergio@sololinux ~ $ cat << EOF
> El directorio actual es: $PWD
> Has iniciado sesion como: $(whoami)
> EOF
El directorio actual es: /home/sergio
Has iniciado sesion como: sergio

Si el ejemplo anterior lo quieres utilizar en una instrucción o bucle, tal vez quieras ejecutar el sangrado de la salida. En este caso el operador de redirección es: <<- . Vemos un ejemplo.

if true; then
    cat <<- EOF
    El directorio actual es: $PWD
    Has iniciado sesion como: $(whoami)
    EOF
fi

Con el operador [ > ] puedes enviar la salida a un archivo que se creará automáticamente (si existe se sustituye). Con el operador [ >> ] se agregara la salida al contenido del archivo.
# Crea o sobrescribe el archivo
cat << EOF > archivo.txt
El directorio actual es: $PWD
Has iniciado sesion como: $(whoami)
EOF

# Agrega el contenido al actual.
cat << EOF >> archivo.txt
El directorio actual es: $PWD
Has iniciado sesion como: $(whoami)
EOF

Ahora incluimos el comando sed para sustituir caracteres.
cat <<'EOF' |  sed 's/l/e/g'
Soy lector de
SoloLinux
EOF

ejemplo de salida…

sergio@sololinux ~ $ cat <<‘EOF’ | sed ‘s/l/e/g’
> Soy lector de
> SoloLinux
> EOF
Soy eector de
SoeoLinux

Como último ejemplo vemos cómo incluir comentarios explicativos en nuestros scripts bash.

cat << 'MULTILINE-COMMENT'
    Las lineas insertadas aqui
    apareceran en el script
    tal como las ves ahora
MULTILINE-COMMENT

ejemplo de salida…
sergio@sololinux ~ $ cat << 'MULTILINE-COMMENT'
>     Las lineas insertadas aqui
>     apareceran en el script
>     tal como las ves ahora
> MULTILINE-COMMENT
    Las lineas insertadas aqui
    apareceran en el script
    tal como las ves ahora

 

Ejecutar Heredoc con SSH

Una de las maneras más fáciles de ejecutar múltiples comandos en un sistema remoto, es a través de Heredoc. Mira que simple.

ssh -T usuario@remoto << EOF
echo "El directorio actual es: $PWD"
echo "El directorio remoto es: \$PWD"
EOF

ejemplo de salida…

El directorio actual es: /home/sergio
El directorio remoto es: /home/sololinux

Como has podido comprobar, Heredoc es una gran herramienta desconocida por los usuarios más noveles, pero que a partir de ahora la tendrán en cuenta en sus nuevos proyectos.

 

Canales de Telegram: Canal SoloLinux – Canal SoloWordpress

Espero que este articulo te sea de utilidad, puedes ayudarnos a mantener el servidor con una donación (paypal), o también colaborar con el simple gesto de compartir nuestros artículos en tu sitio web, blog, foro o redes sociales.

 

Una respuesta

  1. Henry
    04/03/2020

Agregar comentario