Wie man Heredoc in Shell -Skripting verwendet
- 2897
- 74
- Tamina Liebach
Hier dokument (Dokument (Heredoc) ist ein Eingabe- oder Dateistrom -Literal, der als spezieller Codeblock behandelt wird. Dieser Codeblock wird zur Verarbeitung an einen Befehl übergeben. Heredoc Ursprung von Unix Shells und können in beliebten Linux -Shells wie SH, TCSH, KSH, Bash, ZSH, CSH gefunden werden. Insbesondere andere Programmiersprachen wie Perl, Ruby und PHP unterstützen auch Heredoc.
Struktur der Herdoc
Heredoc Verwendet 2 Winkelklammern (<<)
gefolgt von einem Trennzeichen Token. Der gleiche Trennzeichen wird verwendet, um den Codeblock zu beenden. Was auch immer im Trennzeichen kommt, wird als Codeblock angesehen.
Schauen Sie sich das Beispiel unten an. Ich leite den Codeblock zum CAT -Befehl um. Hier ist der Trennzeichen auf “BLOCK"Und beendet von demselben"BLOCK“.
Katze << BLOCK Hello World Today Datum ist $ (Datum +%f) mein Heimverzeichnis = $ Home BLOCK
NOTIZ: Sie sollten denselben Trennzeichen verwenden, um den Block zu starten und den Block zu beenden.
Erstellen Sie multiline Kommentare
Wenn Sie jetzt irgendwann in Bash codieren, wissen Sie vielleicht, dass Bash standardmäßig keine multiline Kommentare wie nicht unterstützt C oder Java. Sie können verwenden Heredoc Um dies zu überwinden.
Dies ist kein integriertes Merkmal von Bash, das mehrzeilige Kommentare unterstützt, sondern nur ein Hack. Wenn Sie nicht umleiten Heredoc In jedem Befehl wird der Interpreter einfach den Codeblock lesen und nichts ausführen.
<< KOMMENTAR Dies ist Kommentarzeile 1 Dies ist Kommentarzeile 2 Dies ist Kommentarzeile 3 KOMMENTARMultiline Kommentare
Umgang mit weißen Räumen
Standardmäßig, Heredoc unterdrückt keine White Space -Zeichen (Registerkarten, Räume). Wir können dieses Verhalten überschreiben, indem wir hinzufügen Bindestrich (-)
nach (<<)
gefolgt von einem Trennzeichen. Dies unterdrückt alle Laschenräume, aber weiße Räume werden nicht unterdrückt.
Katze <<- BLOCK This line has no whitespace. This line has 2 white spaces at the beginning. This line has a single tab. This line has 2 tabs. This line has 3 tabs. BLOCKHandhabungsräume
Variable- und Befehls -Substialität
Heredoc akzeptiert eine variable Substitution. Variablen können benutzerdefinierte Variablen oder Umgebungsvariablen sein.
Heute = $ (Datum +%f) Katze << BLOCK1 # User defined variables Today date is = $TODAY #Environ Variables I am running as = $USER My home dir is = $HOME I am using $SHELL as my shell BLOCK1
In ähnlicher Weise können Sie alle Befehle innerhalb der ausführen Heredoc Codeblock.
Katze << BLOCK2 $(uname -a) BLOCK2Variable und Befehlssubstitution
Spezialfiguren entkommen
Es gibt verschiedene Möglichkeiten, wie wir Sonderfiguren entkommen können. Entweder können Sie es auf Charakterebene oder DOC -Ebene tun.
Um einzelne Sonderzeichen zu entkommen, verwenden Sie a Backslash (\).
Katze << BLOCK4 $(uname -a) BLOCK4 cat << BLOCK5 Today date is = $TODAY BLOCK5
Um allen Sonderzeichen im Block zu entkommen, umgibt der Trennzeichen mit einzelnen Zitaten, doppelten Zitaten oder einem Präfix -Trennzeichen mit einem Backglash.
Katze << 'BLOCK1' I am running as = $USER BLOCK1 cat << "BLOCK2" I am running as = $USER BLOCK2 cat << \BLOCK3 I am running as = $USER BLOCK3Spezialfiguren entkommen
Jetzt, wo wir die Struktur von kennen Heredoc Und wie es funktioniert, sehen wir uns ein paar Beispiele an. Zwei Gemeinschaftsbereiche, in denen ich benutze Heredoc Führen Sie einen Befehlsblock über SSH aus und übergeben SQL -Abfragen durch Heredoc.
Im folgenden Beispiel versuchen wir, einen Codeblock auf einem Remote -Server über SSH auszuführen.
Ausführen von Befehlen über SSHIm folgenden Beispiel bestehe ich a wählen Aussage an PSQL Um eine Verbindung zu einer Datenbank herzustellen und die Abfrage auszuführen. Dies ist eine alternative Möglichkeit, eine Anfrage zu betreiben PSQL im Bash -Skript im Bash -Skript anstatt das zu verwenden -F
Flagge zum Laufen .sql Datei.
#!/usr/bin/env bash uname = postgres dbname = testen psql --username = uname -password - -dbname = $ dbname << BLOCK SELECT * FROM COUNTRIES WHERE region_id = 4; BLOCKAusführen von SQL -Abfrage
Das war's für diesen Artikel. Es gibt noch viel mehr, mit dem Sie anfangen können Heredoc Im Vergleich zu dem, was wir in den Beispielen gezeigt haben. Wenn Sie einen nützlichen Hack mit haben Heredoc Bitte posten Sie es im Kommentarbereich, damit unsere Leser davon profitieren können.
- « So installieren Sie Terraform in Linux -Verteilungen
- So installieren Sie Chef Workstation in RHEL und CentOS 8/7 »