Es gibt eine etwas obskure Funktion in Linux- und Unix-Shells, mit der Sie eine Art Do-while-Schleife für den cat-Befehl öffnen können. Es heißt Heredoc , und es ermöglicht Ihnen, mehr oder weniger einen Texteditor zu haben, egal welche Shell Sie verwenden. Die Syntax lautet:
$ cat << EOF >> example.txt
Die Zeichenfolge in der Mitte ist im Wesentlichen eine Bedingung, die die Schleife stoppt. Das heißt, wenn Sie alleine auf einer Zeile tippen, endet die Schleife. Während der Schleife wird alles, was Sie in Ihr Terminal eingeben, in die Zieldatei geleitet (in diesem Fall).
Installieren
Weitere Linux-Ressourcen
- Spickzettel für Linux-Befehle
- Spickzettel für fortgeschrittene Linux-Befehle
- Kostenloser Online-Kurs:RHEL Technical Overview
- Spickzettel für Linux-Netzwerke
- SELinux-Spickzettel
- Spickzettel für allgemeine Linux-Befehle
- Was sind Linux-Container?
- Unsere neuesten Linux-Artikel
Solange Sie ein Terminal haben, haben Sie bereits die Möglichkeit, ein Heredoc zu initiieren. Ich habe diesen syntaktischen Trick in Bash, tsch und der Korn-Shell verwendet.
Hierdokument verwenden
Um eine Heredoc-"Sitzung" zu öffnen, verwenden Sie den cat-Befehl mit Umleitung, die zuerst auf cat mit einer abschließenden Zeichenfolge zeigt (übliche Konvention ist EOF für "End Of File", kann aber eigentlich alles sein). Nach dem abschließenden Schlüsselwort leiten Sie Ihre Ausgabe in eine Zieldatei um. Sie können dann direkt in Ihr Terminal tippen und die gängigsten Shell-Tastaturkürzel verwenden, um durch Ihre Arbeit zu navigieren. Ihre Sitzung endet, wenn Sie Ihre festgelegte Abschlusszeichenfolge in einer eigenen Zeile eingeben. An der eindeutigen Eingabeaufforderung (normalerweise > ) erkennen Sie, dass Sie sich in einer Heredoc-Schleife befinden Zeichen).
$ cat << EOF >> example.txt
> Everything you type here will be placed into example.txt when I type EOF on a line by itself. Until then, you can type...
>
> whatever...
>
> you want to type.
>
> EOF
$
Alles, was Sie eingeben, während Ihr Terminal auf EOF wartet wird in der Zieldatei abgelegt. Eingabeaufforderungszeichen werden weggelassen, und EOF selbst ist nicht Teil der Datei.
Everything you type here will be placed into example.txt when I type EOF on a line by itself. Until then, you can type...
whatever...
you want to type.
Realistisch gesehen werden Sie die Heredoc-Syntax wahrscheinlich nicht als Ersatz für einen guten Texteditor verwenden. Es ist ein großartiger schneller Trick, mehr als eine Zeile einzugeben, aber mehr als 10 Zeilen oder so beginnen, seine Nützlichkeit zu strapazieren. Sie können beispielsweise nicht nach oben gehen, um vorherige Zeilen zu bearbeiten, ohne die Verlaufsfunktion Ihrer Shell auszulösen. Abhängig von Ihrer Shell und ihrer Konfiguration können Sie möglicherweise nach oben und dann nach unten gehen, um Ihren Text abzurufen, und sich dann mit Strg+B durch Ihren Text zurückbewegen .
Die meisten Funktionen Ihrer Shell funktionieren wie erwartet, aber es gibt wahrscheinlich kein Rückgängigmachen und nur sehr wenig Fehlerbehebung.
Und außerdem ist selbst bei den minimalsten Installationen wahrscheinlich mindestens Vi oder ed installiert.
Und doch ist Heredoc immer noch nützlich! Es ist flexibler als echo , und wenn Sie an einem Shell-Skript arbeiten, ist es unverzichtbar. Stellen Sie sich zum Beispiel vor, Sie schreiben ein Installationsskript, um die Installation einer Reihe benutzerdefinierter Anwendungen zu automatisieren. Eine der Anwendungen wird nicht mit einem .dekstop
verteilt Datei, sodass sie nicht in Ihrem Anwendungsmenü angezeigt wird. Um dies zu beheben, entscheiden Sie sich, eine .desktop
zu generieren Datei bei der Installation.
Anstatt eine .desktop
zu schreiben Datei und als externe Abhängigkeit für Ihr Installationsskript herumtragen, könnten Sie heredoc in Ihrem Installationsskript selbst verwenden:
#!/bin/sh
VERSION=${VERSION:-x.y.z}
PKGNAM=${VERSION:-example}
PKG="${PKGNAM}"-"${VERSION}"-`arch`.tgz
# download package
wget "${PKG}"
tar txvf "${PKG}"
# use here doc to create missing .desktop file
cat << EOF >> $HOME/.local/share/applications/example.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name="${PKGNAM}"
Comment="${PKGNAM}"
Exec="${PKGNAM}" %F
EOF
# insert the rest of an install script...
Sie haben eine automatisierte Texteingabe in eine Datei, es ist kein Texteditor beteiligt (außer dem, den Sie natürlich zum Schreiben Ihres Skripts verwenden). Hier ist, was das Ergebnis .desktop
ist Datei sieht so aus:
[Desktop Entry]
Version=1.0
Type=Application
Name=example
Comment=example
Exec=example %F
Wie Sie sehen können, können Sie innerhalb des Heredocs Variablen verwenden, und sie werden korrekt aufgelöst. Der EOF
Zeichenfolge erscheint nicht in der Datei; es signalisiert nur das Ende des Heredocs.
Besser als Echo
Die Heredoc-Technik gilt im Allgemeinen als einfacher als echo
oder printf , denn sobald Sie sich im Dokument befinden, können Sie tun, was Sie wollen. Es ist in diesem Sinne befreiend, aber im Vergleich zu einem richtigen Texteditor begrenzt.
Verwenden Sie Heredoc für kurze Notizen und für Shell-Skripte, und rätseln Sie nie wieder darüber, wie Sie Konfigurationsdateien dynamisch generieren können.