Einführung
Ein Here-Dokument (HereDoc ) ist ein Codeabschnitt, der als separate Datei fungiert. Ein HereDoc ist ein mehrzeiliger String oder ein Dateiliteral zum Senden von Eingabeströmen an andere Befehle und Programme.
HereDocs sind besonders nützlich, wenn mehrere Befehle gleichzeitig umgeleitet werden, wodurch Bash-Skripte übersichtlicher und leichter verständlich werden.
In diesem Artikel lernen Sie die Grundlagen der Verwendung der HereDoc-Notation und einige typische Anwendungsfälle kennen.
Voraussetzungen
- Zugriff auf die Befehlszeile/das Terminal als sudo-Benutzer.
- Ein Texteditor zum Schreiben von Bash-Skripten.
- Grundlegende Linux-Befehle. Für eine schnelle Referenz holen Sie sich unseren Spickzettel für Linux-Befehle.
Bash HereDoc-Syntax
Die Syntax zum Schreiben eines HereDocs lautet:
[COMMAND] <<[-] 'DELIMITER'
Line 1
Line 2
...
DELIMITER
Es besteht aus den folgenden Elementen:
COMMAND
es ist optional. Funktioniert für jeden Befehl, der eine Umleitung akzeptiert.<<
ist der Umleitungsoperator zum Weiterleiten eines HereDocs anCOMMAND
.-
ist ein Parameter für die Tabulatorunterdrückung.DELIMITER
in der ersten Zeile definiert ein HereDoc-Trennzeichen.END
,EOT
undEOF
sind am häufigsten, aber jedes Wort mit mehreren Zeichen, das nicht im Hauptteil erscheint, funktioniert. Lassen Sie einfache Anführungszeichen in der ersten Zeile weg, um die Erweiterung von Befehlen und Variablen zu ermöglichen.- Das
DELIMITER
in der letzten Zeile zeigt das Ende eines HereDoc an. Verwenden Sie dasselbe Wort aus der ersten Zeile ohne die führenden Leerzeichen.
Das HereDoc selbst enthält beliebig viele Zeilen mit Strings, Variablen, Befehlen und anderen Eingaben.
Bash HereDoc-Beispiele
Dieser Abschnitt zeigt, wie Sie die HereDoc-Notation in verschiedenen Situationen verwenden. Der häufigste Anwendungsfall ist der cat-Befehl.
Mehrzeiliger String
Öffnen Sie das Terminal und geben Sie den folgenden Text ein, indem Sie Enter drücken nach jeder Zeile:
cat << EOF
Hello
World
EOF
Die cat
Der Befehl liest das HereDoc und schreibt den Inhalt in das Terminal.
Variablenerweiterung
Ein HereDoc akzeptiert die Verwendung von Variablen und liest sie.
Um zu sehen, wie das funktioniert, erstellen Sie zwei Variablen im Terminal:
var1="Hello"
var2="World"
Geben Sie das HereDoc an eine cat
weiter Befehl zum Drucken der beiden Variablen zusammen mit einer Umgebungsvariablen:
cat << END
$var1
$var2
$PWD
END
Alle Variablen werden erweitert, und ihre jeweiligen Werte werden auf dem Terminal ausgegeben.
Befehlserweiterung
HereDocs akzeptiert die Befehlsersetzung. Führen Sie den folgenden Code Zeile für Zeile im Terminal aus, um die Ergebnisse anzuzeigen:
cat << EOF
$(echo Hello)
$(whoami)
EOF
Schließen Sie jeden Befehl in $()
ein um eine Anweisung auszuwerten und die Ergebnisse abzurufen. Weglassen von $()
behandelt den Text als String.
Variablen- und Befehlserweiterung ignorieren
Fügen Sie dem ersten Trennzeichen einfache oder doppelte Anführungszeichen hinzu, um die Erweiterung von Variablen und Befehlen in einem HereDoc zu ignorieren.
Zum Beispiel:
cat << "EOF"
$(echo Hello)
$(whoami)
$PWD
EOF
Durch Hinzufügen von Anführungszeichen zum Trennzeichen wird der Inhalt als HereDoc-Literal behandelt.
Piping und Weiterleitung
Verwenden Sie Piping oder Redirecting, um die Befehlsergebnisse an einen anderen Befehl weiterzuleiten. Erstellen Sie beispielsweise ein Bash-Skript und fügen Sie den folgenden Inhalt hinzu, um einen Befehl weiterzuleiten:
#!/bin/bash
cat << EOF | base64 -d
SGVsbG8KV29ybGQK
EOF
Verwenden Sie alternativ die Umleitungsnotation, um dasselbe Ergebnis zu erzielen:
#!/bin/bash
(base64 -d) < cat << EOF
SGVsbG8KV29ybGQK
EOF
Führen Sie das Bash-Skript aus, um die Ergebnisse anzuzeigen.
In beiden Fällen ist die Ausgabe von cat
und ein HereDoc-Befehl leitet (oder leitet) an base64 -d
weiter Befehl. Als Ergebnis entschlüsselt das Skript die Nachricht aus dem HereDoc.
In Datei schreiben
HereDoc ermöglicht das Schreiben mehrzeiliger Dokumente über einen Befehl.
Um eine Datei zu erstellen und den HereDoc-Inhalt zu speichern, verwenden Sie das folgende Format:
cat << EOF > hello_world.txt
Hello
World
EOF
Wenn das Dokument nicht existiert, erstellt der Befehl es. Prüfen Sie zur Bestätigung den Inhalt der Datei:
cat hello_world.txt
Die Konsole zeigt den Inhalt der Datei.
Tab-Unterdrückung
Fügen Sie einen Bindestrich hinzu (-
) nach der Umleitung, um führende Tabulatoren zu unterdrücken. Erstellen Sie beispielsweise das folgende Skript und führen Sie es aus:
#!/bin/bash
cat <<- EOF
Hello
World
EOF
Ohne Tabulatorunterdrückung wird die Meldung mit Einrückung auf der Konsole ausgegeben. Das Hinzufügen des Bindestrichs entfernt den Tabulatoreinzug und gibt die Nachricht ohne die führenden Leerzeichen aus.
Innere Anweisungen und Schleifen
Beachten Sie bei der Arbeit mit einem HereDoc innerhalb von Anweisungen und Schleifen das folgende Verhalten:
- In Anweisungen und Schleifen codieren eingerückt ist. Fügen Sie nach dem Umleitungsoperator einen Bindestrich hinzu, um Nachrichten aus einem HereDoc ohne Einrückung auszugeben.
- Das Endtrennzeichen darf keine Leerzeichen oder Einrückungen davor haben.
Probieren Sie den folgenden Beispielcode aus, um zu sehen, wie Sie ein HereDoc innerhalb einer if-Anweisung verwenden:
#!/bin/bash
if true;
then
cat <<- "END"
Hello
World
END
fi
Der Bindestrich stellt sicher, dass die Einzüge nicht angezeigt werden, wenn das Programm ausgeführt wird. Das Endtrennzeichen ist nicht eingerückt und das Hinzufügen von Leerzeichen verursacht einen Fehler.
Mehrzeilige Kommentare
Ein HereDoc mit dem Null-Befehl (:
) erzeugt den Effekt von Blockkommentaren in Bash-Skripten.
Zum Beispiel:
#!/bin/bash
: << 'END'
This is a comment
END
Die Verwendung der HereDoc-Notation als Blockkommentar ist unkonventionell. Im Allgemeinen unterstützt Bash keine Blockkommentare.
Escapezeichen
Um eine Zeicheninterpretation zu vermeiden, fügen Sie einen umgekehrten Schrägstrich hinzu (\
) vor einem Zeichen:
cat << EOF
\$100
EOF
Alternativ können Sie die Zeicheninterpretation vollständig vermeiden, indem Sie das Trennzeichen maskieren:
cat << \EOF
$100
EOF
Die Verwendung von Anführungszeichen am Trennzeichen ist in diesem Fall äquivalent.
Funktionen
Fügen Sie einer Funktion Parameter hinzu, indem Sie Informationen über ein HereDoc weiterleiten. Erstellen Sie beispielsweise eine Funktion zum Lesen von Zeilen und zum Hinzufügen von Informationen über HereDoc:
#!/bin/bash
readLines(){
read greeting
read name
}
readLines << EOF
Hello
$USER
EOF
echo $greeting
echo $name
Die Funktion speichert die vom HereDoc bereitgestellten Informationen in Variablen.
Führen Sie das Skript aus, um die Variablenwerte auf dem Terminal auszugeben.
HereDoc und SSH
Ein HereDoc ist praktisch, um mehrere Befehle auf einem Remote-Computer auszuführen. Übergeben Sie ein HereDoc an die SSH-Verbindung, um mehrere Befehle auszuführen.
Zum Beispiel:
ssh [email protected] << EOF
echo "Local user: $USER"
echo "Remote user: \$USER"
EOF
Der Befehl gibt die lokalen und entfernten Benutzer auf der Konsole aus.
HereDoc und SFTP
SFTP hilft bei der sicheren Datenübertragung über das SSH-Protokoll. Leiten Sie ein HereDoc weiter, um mehrere SFTP-Befehle automatisch auszuführen:
sftp [email protected] << EOF
put test.sh
EOF
Der Code lädt eine Beispieldatei auf den Remote-Computer hoch.