GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash Heredoc

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.


Linux
  1. Der „eval“-Befehl in Bash?

  2. apachectl von bash starten

  3. Bash-Exportbefehl

  4. Bash - Datumsbefehl und Leerzeichen

  5. Führen Sie den Bash-Befehl auf der Jenkins-Pipeline aus

Verlaufsbefehl in Linux (Bash-Verlauf)

Bash Exit-Befehl und Exit-Codes

Bash-printf-Befehl

Bash Heredoc-Tutorial für Anfänger

Bash-Skripting (II)

Bash-Scripting(III)