Wie benutzt man “Dokumente hier” in Bash unter Linux

Inhalt

Ein Terminalfenster auf einem Linux-Computersystem.

Los extrañosdocumentos aquíle posibilitan usar la redirección de entrada / salida dentro de los scripts Bash en Linux. Son una magnífica manera de automatizar los comandos que necesita para ejecutar en una computadora remota.

Aquí Documentos

Muchos comandos en Linux disponen nombres de dos o tres letras. Esto es en parte lo que da lugar a la idea de que Linux es difícil de aprender y está repleto de comandos arcanos. Pero uno de los nombres más extraños en Linux no es uno de los crípticamente cortos. “Aquí los documentosno son documentos, y tampoco está muy claro a qué se refiere el “Hier”.

Son una construcción relativamente oscura, pero son útiles. Natürlich, das ist linux, por lo que hay más de una forma de despellejar a un gato. Algunas de las funciones proporcionadas por estos documentos se pueden reproducir de otras formas. Estos métodos alternativos generalmente son más complicados. En programación y scripting, “más complejoademás significamás propenso a erroresy que su código es más difícil de mantener.

Donde aquí los documentos verdaderamente sobresalen es en la automatización de comandos que desea enviar a una computadora remota desde una conexión establecida desde dentro de un script. Hacer la conexión es fácil, pero una vez que se ha realizado la conexión, ¿cómobombeastus comandos desde tu script al shell en la computadora remota? Aquí los documentos le posibilitan hacer eso de manera muy simple.

Principios básicos de los documentos Here

La representación idiomática de un documento aquí se ve así:

COMMAND << limit_string
 .
 .
text 
data
variables
.
.
limit_string
  • BEFEHL: Puede ser cualquier comando de Linux que acepte entradas redirigidas. Beachten Sie das echo Befehl no acepta entrada redirigida. Si necesita escribir en la pantalla, du kannst den ... benutzen cat Befehl, que hace.
  • <<: El operador de redireccionamiento.
  • cadena_límite: Esta es una etiqueta. Puede ser lo que quiera siempre que no aparezca en el listado de datos que está redirigiendo al comando. Se utiliza para marcar el final de la lista de texto, datos y variables.
  • Lista de datos: Una lista de datos que se enviarán al comando. Puede contener comandos, texto y variables. El contenido de la lista de datos se introduce en el comando una línea al mismo tiempo hasta que se encuentra _limit_string.

Probablemente verá ejemplos de aquí documentos que usan “EOF” como la cadena de límite. No favorecemos ese enfoque. Funciona, aber “EOF” es bedeutet “Fin de archivo”. Aparte del raro caso en el que un documento de inicio es lo último en un archivo de secuencia de comandos, “EOF” se está usando erróneamente.

Hará que sus scripts sean mucho más legibles si utiliza una cadena de límite que se refiera a lo que está haciendo. Si está enviando una serie de comandos a una computadora remota a través de Sichere Abdeckung (SSH), una cadena de límite llamada algo como_remote_commandstendría mucho sentido. No es necesario comenzar con un guión bajo_” Charakter. Lo hacemos debido a que los marca como algo fuera de lo común en su guión.

Ejemplos sencillos

Puede usar aquí documentos en la línea de comandos y en scripts. Cuando escriba lo siguiente en una ventana de terminal, verá un>Mensaje de continuación de línea cada vez que presiona” Eintreten “. Cuando escribe la cadena de límite_end_of_text” und tippen Sie auf “Eintreten”, la lista de sitios web se pasa a cat, y se muestran en la ventana de la terminal.

Katze << _end_of_text 
How-To Geek 
Review Geek 
LifeSavvy 
CloudSavvy IT
MindBounce
_end_of_text

Ese no es el ejercicio más valioso, pero demuestra que no se envía nada al comando hasta que se recopila toda la lista de datos y se encuentra la cadena de límite. das cat El comando no recibe ninguna entrada hasta que ingresa la cadena de límite_end_of_texty presiona la tecla “Eintreten”.

Podemos hacer lo mismo en un guión. Escriba o copie este ejemplo en un editor, guarde el archivo comoheredoc-1.sh” y cierre el editor.

#!/bin/bash

cat << "_end_of_text"
Your user name is: $(Wer bin ich)
Your current working directory is: $PWD
Your Bash version is: $BASH_VERSION
_end_of_text

A medida que sigue este post, cada vez que cree un script, soll hazlo ejecutable antes de que se ejecute. En cada caso, Verwenden Sie die chmod Befehl. Sustituya el nombre del script en cada ejemplo por el nombre del script utilizado aquí.

chmod +x heredoc-1.sh

Este script contiene dos variables de entorno, $PWD und $BASH_VERSION. Los nombres de las variables de entorno se reemplazan por sus valores de datos (el directorio de trabajo actual y la versión de Bash) cuando se ejecuta el script.

El script además utiliza sustitución de comando über ihn whoami Befehl. El nombre del comando se reemplaza por su propia salida. La salida de todo el script se escribe en la ventana de terminal a través de el comando cat. Ejecutamos el script llamándolo por su nombre:

./heredoc-1.sh

Si modifica la secuencia de comandos y coloca la cadena de límite en la primera línea del documento aquí entre comillas" “, La lista de datos se pasa al comando de documento aquí literalmente. Los nombres de las variables se muestran en lugar de los valores de las variables y no se realizará la sustitución de comandos.

#!/bin/bash

cat <<- "_end_of_text"
Your user name is: $(Wer bin ich)
Your current working directory is: $PWD
Your Bash version is: $BASH_VERSION
_end_of_text

Manejo de caracteres de la pestaña

Standardmäßig, los caracteres de tabulación en su lista de datos se conservarán y escribirán en la ventana del terminal. Copie y guarde este ejemplo comoheredoc-2.sh”. Hágalo ejecutable usando el chmod Befehl. Edite las líneas con sangría para asegurarse de que tengan uno o dos caracteres de tabulación al principio de la línea en lugar de una serie de espacios.

#!/bin/bash

cat << _end_of_text
Your user name is: $(Wer bin ich)
  Your current working directory is: $PWD
    Your Bash version is: $BASH_VERSION
_end_of_text
./heredoc-2.sh

Las pestañas se escriben en la ventana de la terminal.

Añadiendo un guión-”Para el operador de redirección, el documento aquí ignorará los caracteres de tabulación iniciales. Guarde este ejemplo comoheredoc-3.sh” und machen Sie es ausführbar.

#!/bin/bash

cat <<- _end_of_text
Your user name is: $(Wer bin ich)
  Your current working directory is: $PWD
    Your Bash version is: $BASH_VERSION
_end_of_text
./heredoc-3.sh

Las pestañas se ignoran. Esto puede parecer trivial, pero es una buena manera de lidiar con las pestañas iniciales debido a las secciones sangradas de los scripts.

Los bucles y otras construcciones lógicas suelen tener sangría. Si su documento aquí está contenido en una sección con sangría de una secuencia de comandos, utilice un guión-”Con el operador de redirección elimina los problemas de formato causados ​​por los caracteres de tabulación iniciales.

#!/bin/bash

if true; then
  cat <<- _limit_string
  Line 1 with a leading tab.
  Line 2 with a leading tab.
  Line 3 with a leading tab.
  _limit_string
fi

Redirigir a un archivo

La salida del comando utilizado con el documento aquí se puede redirigir a un archivo. Verwenden Sie die “>“(Crear el archivo) Ö”>>“(Cree el archivo si no existe, añádalo al archivo si existe) operadores de redirección nach la cadena de límite en la primera línea del documento aquí.

Este script esheredoc-4.sh”. Redirigirá su salida a un archivo de texto llamadosession.txt”.

#!/bin/bash

cat << _end_of_text > session.txt
Your user name is: $(Wer bin ich)
Your current working directory is: $PWD
Your Bash version is: $BASH_VERSION
_end_of_text
./heredoc-4.sh
cat session.text

Canalización de la salida a otro comando

La salida del comando utilizado en un documento aquí se puede canalizar como entrada a otro comando. Utiliza la pipa|Operador nach la cadena de límite en la primera línea del documento aquí. Vamos a canalizar la salida del comando here document, cat, innerhalb sed. Wir wollen sustituir todas las apariciones de la letra “ein” con la letra “e”.

Nombra este scriptheredoc-5.sh”.

#!/bin/bash

cat << _end_of_text | sed 's/a/e/g'
How
To
Gaak
_end_of_text
./heredoc-5.sh

Gaakse corrige a “Geek”.

Envío de parámetros a una función

El comando que se utiliza con un documento aquí puede ser una función en el script.

Este script pasa algunos datos del vehículo a una función. La función lee los datos como si los hubiera escrito un usuario. Nächste, se imprimen los valores de las variables. Dieses Skript speichern unter “heredoc-6.sh”.

#!/bin/bash

# the set_car_details() function
set_car_details ()
{
read make
read model
read new_used
read delivery_collect
read location
read price
}

# The here document that passes the data to set_car_details()
set_car_details << _mars_rover_data
NASA
Perseverance Rover
Used
Collect
Mars (long,lat) 77.451865,18.445161
2.2 billion
_mars_rover_data

# Retrieve the vehicle details
echo "Make: $make"
Echo "Modell: $model"
Echo "New or Used: $new_used"
Echo "Delivery or Collection: $delivery_collect"
Echo "Location: $Lage"
Echo "Price $: $price"
./heredoc-6.sh

Los detalles del vehículo se escriben en la ventana de la terminal.

Crear y enviar un email

Podemos usar un documento aquí para redactar y enviar un email. Tenga en cuenta que podemos pasar parámetros al comando delante del operador de redirección. Fueron usando el Linux mail Befehl zum enviar un correo electrónico a través del sistema de correo local a la cuenta de usuario llamada “dave”. das -s Die Option (asunto) nos posibilita especificar el asunto del email.

Este ejemplo forma el scriptheredoc-7.sh”.

#!/bin/bash

article="Here Documents"

mail -s 'Workload status' dave << _project_report
User name: $(Wer bin ich)
Has completed assignment:
Article: $article
_project_report
./heredoc-7.sh

No hay salida visible de este script. Pero cuando revisamos nuestro correo, vemos que el email fue redactado, enviado y entregado.

E-Mail

Uso de documentos aquí con SSH

Aquí los documentos son una forma poderosa y conveniente de ejecutar algunos comandos en una computadora remota una vez que se ha establecido una conexión SSH. Si ha configurado claves SSH entre las dos computadoras, el procedimiento de inicio de sesión será totalmente automático. En este ejemplo rápido y sucio, se le pedirá la contraseña para la cuenta de usuario en la computadora remota.

Este script esheredoc-8.sh”. Vamos a conectarnos a una computadora remota llamadapc-remota”. La cuenta de usuario se llama “dave”. Wir verwenden die -T (Pseudo-Terminal-Mapping deaktivieren) debido a que no necesitamos que se nos asigne un pseudo-terminal interactivo.

Im Bereich “hacer algo de trabajo aquídel script, podríamos pasar una lista de comandos, y estos se ejecutarían en la computadora remota. Natürlich, podría simplemente llamar a un script que estaba en la computadora remota. El script remoto podría contener todos los comandos y rutinas que desea ejecutar.

Todo lo que nuestro script, heredoc-8.sh, va a hacer es actualizar un registro de conexión en la computadora remota. La cuenta de usuario y el sello de fecha y hora se registran en un archivo de texto.

#!/bin/bash

ssh -T [email protected] << _remote_commands

# do some work in here

# update connection log
echo $USER "-" $(Datum) >> /home/dave/conn_log/script.log
_remote_commands

Cuando ejecutamos el comando, se nos solicita la contraseña de la cuenta en el Fernbedienung Rechner.

./heredoc-8.sh

Se muestra cierta información sobre la computadora remota y regresamos al símbolo del sistema.

Sobre el Fernbedienung Rechner, wir können benutzen cat para chequear el registro de conexión:

cat conn_log/script.log

Cada conexión está listada para nosotros.

VERBUNDEN: So erstellen und installieren Sie SSH-Schlüssel aus der Linux-Shell

Nombre extraño, características interesantes

Aquí los documentos son extravagantes pero poderosos, especialmente cuando se usan para enviar comandos a una computadora remota. Sería muy sencillo crear un script de una rutina de respaldo usando rsync. Anschließend, el script podría conectarse a la computadora remota, verificar el espacio de almacenamiento restante y enviar un email de alerta si el espacio se estaba agotando.

VERBUNDEN: So sichern Sie Ihr Linux-System

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.