Beim Schreiben von Shell-Skripten befinden Sie sich möglicherweise in einer Situation, in der Sie einen mehrzeiligen Text- oder Codeblock an einen interaktiven Befehl wie tee
übergeben müssen , cat
, oder sftp
.
In Bash und anderen Shells wie Zsh ist ein Here-Dokument (Heredoc) eine Art Umleitung, mit der Sie mehrere Eingabezeilen an einen Befehl übergeben können.
Die Syntax zum Schreiben von HereDoc hat folgende Form:
[COMMAND] <<[-] 'DELIMITER'
HERE-DOCUMENT
DELIMITER
- Die erste Zeile beginnt mit einem optionalen Befehl, gefolgt von dem speziellen Umleitungsoperator
<<
und der begrenzende Bezeichner.- Sie können jede Zeichenfolge als begrenzenden Bezeichner verwenden, die am häufigsten verwendeten sind EOF oder END.
- Wenn der begrenzende Bezeichner nicht in Anführungszeichen steht, ersetzt die Shell alle Variablen, Befehle und Sonderzeichen, bevor sie die Here-Dokument-Zeilen an den Befehl weitergibt.
- Anhängen eines Minuszeichens an den Umleitungsoperator
<<-
, bewirkt, dass alle führenden Tabulatorzeichen ignoriert werden. Dadurch können Sie beim Schreiben von Here-Dokumenten in Shell-Skripten Einrückungen verwenden. Führende Leerzeichen sind nicht erlaubt, nur Tabulatoren.
- Der Hier-Dokument-Block kann Zeichenfolgen, Variablen, Befehle und jede andere Art von Eingabe enthalten.
- Die letzte Zeile endet mit der abgrenzenden Kennung. Leerzeichen vor dem Trennzeichen sind nicht erlaubt.
Grundlegende Heredoc-Beispiele #
In diesem Abschnitt sehen wir uns einige grundlegende Beispiele zur Verwendung von Heredoc an.
Heredoc wird am häufigsten in Kombination mit dem cat-Befehl verwendet.
Im folgenden Beispiel übergeben wir zwei Textzeilen, die eine Umgebungsvariable und einen Befehl enthalten, an cat
mit einem Here-Dokument.
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 Variable 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 die Shell keine Parametererweiterung und Befehlsersetzung durchführt, wenn das Trennzeichen in Anführungszeichen gesetzt wird.
The current working directory is: $PWD
You are logged in as: $(whoami)
Wenn Sie ein Heredoc innerhalb einer Anweisung oder Schleife verwenden, verwenden Sie den <<-
Umleitungsoperation, mit der Sie Ihren Code einrücken können.
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 >
in eine Datei umleiten , >>
Betreiber.
cat << EOF > file.txt
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF
Wenn die file.txt nicht existiert, wird sie erstellt. Bei Verwendung von >
die Datei wird überschrieben, während >>
wird die Ausgabe an die Datei anhängen.
Die Heredoc-Eingabe kann auch geleitet werden. Im folgenden Beispiel ist der sed
Der Befehl ersetzt alle Instanzen des l
Zeichen mit e
:
cat <<'EOF' | sed 's/l/e/g'
Hello
World
EOF
Heeeo
Wored
Um die geleiteten Daten in eine Datei zu schreiben:
cat <<'EOF' | sed 's/l/e/g' > file.txt
Hello
World
EOF
Verwendung 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, stellen Sie sicher, dass Sie alle Variablen, Befehle und Sonderzeichen maskieren, 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
Sie können auch eine auf SSH-Schlüsseln basierende Authentifizierung einrichten und sich mit Ihren Linux-Servern verbinden, ohne ein Passwort einzugeben.
Schlussfolgerung #
In diesem Handbuch haben Sie gelernt, was heredoc
ist und wie Sie es in Ihren Shell-Skripten verwenden.
Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.