What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179
Inhaltsverzeichnis:
Beim Schreiben von Shell-Skripten müssen Sie möglicherweise einen mehrzeiligen Text- oder Codeblock an einen interaktiven Befehl wie
tee
,
cat
oder
sftp
.
In Bash und anderen Shells wie Zsh ist ein Here-Dokument (Heredoc) eine Art Umleitung, mit der Sie einem Befehl mehrere Eingabezeilen übergeben können.
Die Syntax zum Schreiben von HereDoc hat die folgende Form:
<< 'DELIMITER' HERE-DOCUMENT DELIMITER
- Die erste Zeile beginnt mit einem optionalen Befehl, gefolgt vom speziellen Umleitungsoperator
<<und der Begrenzungskennung.- Sie können eine beliebige Zeichenfolge als Begrenzungskennung verwenden. Die am häufigsten verwendeten sind EOF oder END. Wenn die Begrenzungskennung nicht in Anführungszeichen gesetzt ist, ersetzt die Shell alle Variablen, Befehle und Sonderzeichen, bevor die Zeilen hier im Dokument an den Befehl übergeben werden Das Minuszeichen für den Umleitungsoperator
<<-bewirkt, dass alle führenden Tabulatorzeichen ignoriert werden. Auf diese Weise können Sie beim Schreiben von Here-Dokumenten in Shell-Skripten Einrückungen verwenden. Führende Leerzeichen sind nicht erlaubt, nur Tabulatoren.
Der Here-Document-Block kann Zeichenfolgen, Variablen, Befehle und jede andere Art von Eingabe enthalten. Die letzte Zeile endet mit der Begrenzungskennung. Leerzeichen vor dem Begrenzer sind nicht zulässig. - Sie können eine beliebige Zeichenfolge als Begrenzungskennung verwenden. Die am häufigsten verwendeten sind EOF oder END. Wenn die Begrenzungskennung nicht in Anführungszeichen gesetzt ist, ersetzt die Shell alle Variablen, Befehle und Sonderzeichen, bevor die Zeilen hier im Dokument an den Befehl übergeben werden Das Minuszeichen für den Umleitungsoperator
Grundlegende Heredoc-Beispiele
In diesem Abschnitt werden einige grundlegende Beispiele für die Verwendung von heredoc vorgestellt.
Heredoc wird am häufigsten in Kombination mit dem Befehl cat verwendet.
Im folgenden Beispiel übergeben wir zwei Textzeilen mit einer Umgebungsvariablen und einem Befehl an
cat
Verwendung eines Here-Dokuments.
cat << EOF The current working directory is: $PWD You are logged in as: $(whoami) EOF
Wie Sie der folgenden Ausgabe entnehmen können, werden sowohl die Variablen- als auch die Befehlsausgabe ersetzt:
The current working directory is: /home/linuxize You are logged in as: linuxize
Mal sehen, was passiert, wenn wir das Trennzeichen in einfache oder doppelte Anführungszeichen setzen.
cat <<- "EOF" The current working directory is: $PWD You are logged in as: $(whoami) EOF
Sie können feststellen, dass, wenn das Trennzeichen in Anführungszeichen gesetzt ist, die Shell keine Parametererweiterung und keine Befehlsersetzung vornimmt.
The current working directory is: $PWD You are logged in as: $(whoami)
if true; then cat <<- EOF Line with a leading tab. EOF fi
Line with a leading tab.
Anstatt die Ausgabe auf dem Bildschirm anzuzeigen, können Sie sie mit den Operatoren
>
,
>>
in eine Datei umleiten.
cat << EOF > file.txt The current working directory is: $PWD You are logged in as: $(whoami) EOF
Wenn die Datei.txt nicht existiert, wird sie erstellt. Bei Verwendung von
>
die Datei überschrieben, während mit
>>
die Ausgabe an die Datei
>>
wird.
Der Heredoc-Eingang kann auch weitergeleitet werden. Im folgenden Beispiel ersetzt der Befehl
sed
alle Instanzen des Zeichens
l
durch
e
:
cat <<'EOF' | sed 's/l/e/g' Hello World EOF
Heeeo Wored
So schreiben Sie die weitergeleiteten Daten in eine Datei:
cat <<'EOF' | sed 's/l/e/g' > file.txt Hello World EOF
Verwenden von Heredoc mit SSH
Die Verwendung von Heredoc ist eine der bequemsten und einfachsten Möglichkeiten, mehrere Befehle auf einem Remote-System über SSH auszuführen.
Wenn Sie Trennzeichen ohne Anführungszeichen verwenden, müssen Sie sicherstellen, dass alle Variablen, Befehle und Sonderzeichen maskiert werden, da sie sonst lokal interpoliert werden:
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/linuxize The current remote working directory is: /home/user
Möglicherweise möchten Sie auch eine SSH-Schlüssel-basierte Authentifizierung einrichten und eine Verbindung zu Ihren Linux-Servern herstellen, ohne ein Kennwort einzugeben.
Fazit
In diesem Handbuch haben Sie erfahren, was
heredoc
und wie es in Ihren Shell-Skripten verwendet wird.
Microsoft Research Asia veranstaltet Gates zum 10-Jahres-Bash
Microsoft Research Asia ist von einem Dutzend Personen 1998 auf über 350 ein Jahrzehnt später gewachsen.
Ausführen von Bash unter Ubuntu unter Windows 10
Wenn Sie Windows Subsystem für Linux aktivieren, können Sie Bash unter Ubuntu in Bash-Skripten von Windows 10 ausführen , Linux-Kommandozeilen-Tools, Linux-First-Tools.
Bash-Arrays
Arrays sind eine der am häufigsten verwendeten und grundlegendsten Datenstrukturen. In diesem Artikel werden die Bash-Arrays behandelt und erläutert, wie Sie sie in Ihren Bash-Skripten verwenden.







