Cómo utilizar Heredoc en secuencias de comandos de Shell

Cómo utilizar Heredoc en secuencias de comandos de Shell

Aquí, el documento ( Heredoc. es un literal de flujo de entrada o archivo que se trata como un bloque especial de código. Este bloque de código se pasará a un comando para su procesamiento. Heredoc. se origina en shells UNIX. y se puede encontrar en shells populares de Linux como sh, tcsh, ksh, bash, zsh, csh. En particular, otros lenguajes de programación como Perl, Ruby, PHP también admiten heredoc.

Estructura de Herdoc

Heredoc. usa 2 corchetes angulares (<<) seguidos de un token delimitador. Se utilizará el mismo token delimitador para terminar el bloque de código. Todo lo que venga dentro del delimitador se considera un bloque de código.

Mira el ejemplo a continuación. Estoy redirigiendo el bloque de código al comando cat. Aquí el delimitador se establece en “ BLOQUE. y termina con el mismo “ BLOQUE. .

cat << BLOQUE. Hola mundo hoy la fecha es $ (fecha +% F) Mi directorio de inicio = $ INICIO BLOQUE.

NOTA. debe usar el mismo token delimitador para iniciar el bloqueo y terminar el bloque.

Crear comentarios multilínea

Si está codificando en algún momento en bash ahora, es posible que sepa que bash por defecto no admite comentarios multilínea como C. o Java. Puedes usar HereDoc. para superar esto.

freestar.config.enabled_slots.push

Esto no es un-en función de bash que admite comentarios de varias líneas, pero solo un truco. Si no redirige heredoc. a ningún comando, el intérprete simplemente leerá el bloque de código y no ejecutará nada.

<< COMENTARIO. Esta es la línea de comentario 1 Esta es la línea de comentarios 2 Esta es la línea de comentarios 3 COMENTARIO.  Comentarios de varias líneas  Comentarios de líneas múltiples Comentarios de líneas múltiples

Manejo de espacios en blanco

De forma predeterminada, heredoc. no suprimirá ningún carácter de espacio en blanco (tabulaciones, espacios). Podemos anular este comportamiento agregando un guión (-) después de (<<) seguido de un delimitador. Esto suprimirá todos los espacios de tabulación, pero los espacios en blanco no se suprimirán.

cat <<-BLOCK Esta línea no tiene espacios en blanco. Esta línea tiene 2 espacios en blanco al principio. Esta línea tiene una sola pestaña. Esta línea tiene 2 pestañas. Esta línea tiene 3 pestañas. BLOQUE  Manejo de espacios Manejo de espacios Manejo de espacios

Sustitución de variables y comandos

Heredoc acepta la sustitución de variables. Las variables pueden ser variables definidas por el usuario o variables ambientales.

HOY = $ (fecha +% F) cat < De manera similar, puede ejecutar cualquier comando dentro del bloque de código heredoc.

cat <  Variable y sustitución de comandos Sustitución de variables y comandos

Caracteres especiales de escape

Hay varias formas de escapar de los caracteres especiales. Puedes hacerlo a nivel de personaje o de documento.

Para escapar de los caracteres especiales individuales, usa una barra invertida (\).

cat < Para escapar de todos los caracteres especiales dentro del bloque, rodee el delimitador con comillas simples, comillas dobles o delimitador de prefijo con una barra invertida.

cat <<'BLOCK1' Estoy ejecutando como = $ USER BLOCK1 cat <<"BLOCK2" Estoy ejecutando como = $ USER BLOCK2 cat <<\ BLOCK3 Estoy ejecutando como = $ USER BLOCK3  Caracteres especiales de escape Escapando S Caracteres especiales Caracteres especiales de escape

Ahora que conocemos la estructura de heredoc. y cómo funciona, veamos algunos ejemplos. Dos áreas comunes donde uso heredoc. son ejecutar un bloque de comandos a través de SSH y pasar consultas SQL a través de heredoc.

En el siguiente ejemplo, estamos intentando ejecutar un bloque de código en un servidor remoto a través de SSH.

 Ejecutando comandos sobre SSH  Ejecutar comandos sobre SSH Ejecutar comandos sobre SSH

En el siguiente ejemplo, paso una instrucción select. a psql. para conectarme a una base de datos y ejecutar la consulta. Esta es una forma alternativa de ejecutar una consulta en psql. dentro del script bash en lugar de usar la marca-f para ejecutar el archivo .sql.

#!/Usr/bin/env bash UNAME = postgres DBNAME = testing psql–username = $ UNAME–password–dbname = $ DBNAME <  Ejecutando SQL QUERY Ejecutando SQL QUERY

Eso es todo por este artículo. Puede hacer mucho más con heredoc. en comparación con lo que mostramos en los ejemplos. Si tiene algún truco útil con heredoc. publíquelo en la sección de comentarios para que nuestros lectores puedan beneficiarse de ello.