Operation Manual
“buch” — 2014/9/6 — 18:56 — page 120 — #116
3 Arbeiten im Terminal
Ein- und Ausgabeumleitung
Bei der Ausführung von Kommandos in der bash existieren drei sogenannte Stan-
darddateien. Der Begriff Datei ist dabei irreführend: Es handelt sich nicht um richtige
Dateien, sondern um Dateideskriptoren, die wie Dateien behandelt werden.
Standardeingabe: Das gerade ausgeführte Programm, z. B. die bash oder ein
beliebiges von dort gestartetes Kommando, liest alle Eingaben von der Standard-
eingabe. Als Standardeingabequelle gilt normalerweise die Tastatur.
Standardausgabe: Dorthin werden die Ausgaben des Programms geleitet – etwa
dieDateilisteeines
ls-Kommandos. Als Standardausgabe gilt das Terminal.
Standardfehler: Auch Fehlermeldungen werden üblicherweise im aktuellen Ter-
minal angezeigt.
An sich ist das alles selbstverständlich – woher sonst als von der Tastatur sollten die
Eingaben kommen, wo sonst als a uf dem Bildschirm sollten Ergebnisse oder Fehler
angezeigt werden? Bemerkenswert ist aber die Möglichkeit, die Standardeingabe oder
-ausgabe umzuleiten.
Nehmen wir an, Sie möchten die Liste aller Dateien eines Verzeichnisses nicht auf
dem Bildschirm sehen, sondern diese in einer Textdatei speichern. Die Standardaus-
gabe soll also in eine echte Datei umgeleitet werden. Das erfolgt in der bash durch
das Zeichen
>.DieTextdateimeine-bilder.txt enthält also nach der Ausführung des
folgenden Kommandos zeilenweise die Dateinamen aller PNG-Dateien.
ls *.png > meine - bilder . txt
Die Ausgabeumleitung mit > datei ist die häufigste Anwendung. Daneben existie-
ren viele Varianten:
2> fehler leitet die Fehlermeldungen in die angegebene Datei.
>& alles bzw. &> alles leitet die Standardausgabe und die Fehlermeldungen in die
angegebene Datei. Wenn Sie statt
> die Verdoppelung >> verwenden, werden die jewei-
ligen Ausgaben an das Ende einer Datei angehängt, ohne diese zu überschreiben.
Eine Eingabeumleitung erfolgt mit
< datei: Kommandos, die Eingaben von der Tasta-
tur erwarten, lesen diese damit aus der angegebenen Datei.
Vorsicht
Sie können nicht gleichzeitig eine Datei zu bearbeiten und das Ergebnis dorthin
schreiben! Die Kommandos
sort datei > datei und sort < datei > datei führen
beide dazu, dass die angegebene Datei gelöscht wird! Um die Datei zu sortieren, müs-
sen Sie diese zuerst umbenennen, z. B. so:
mv datei tmp; sort tmp > datei; rm tmp
120
“buch” — 2014/9/6 — 18:56 — page 121 — #117
3
3.4 Die Bourne Again Shell (bash)
Kommandos im Hintergrund ausführen
Normalerweise wartet die bash bei jedem Kommando, bis dieses fertig ist. Es besteht
aber auch die Möglichkeit, Kommandos als Hintergrundprozesse zu starten. Dazu
stellen Sie dem Kommando einfach das Zeichen
& hintan.
Das folgende Kommando durchsucht das aktuelle Verzeichnis und alle Unterver-
zeichnisse nach Dateien mit der Endung
.c. Die resultierende Liste der Dateinamen
wird in der Datei
alle-c-dateien.txt gespeichert. Da die Suche nach den Dateien
möglicherweise längere Zeit dauern wird, wollen Sie in der Zwischenzeit andere
Dinge erledigen und starten das Programm mit
& im Hintergrund. Sie können nun
sofort weiterarbeiten. Die Information
[1] 3537 bedeutet,dassessichumdenbash-
Hintergrundprozess mit der Nummer 1 handelt. Die globale Prozessidentifikations-
nummer lautet 3537. Sobald die Suche einige Zeit später abgeschlossen ist, werden Sie
darüber informiert.
find . - name '*.c' > alle - c - dateien.txt &
[1] 3537
... ( andere Kommandos )
[1]+ Fertig find . -name '*.py' > alle - python- dateien.txt
Der Programmstart im Hintergrund ist auch dann zweckmäßig, wenn das auszu-
führende Programm eine grafische Benutzeroberfläche besitzt und daher in einem
eigenen Fenster erscheint. Das trifft beispielsweise auf den Editor Leafpad oder auf
den Webbrowser Midori zu. Ohne das
&-Zeichen können Sie nach dem Start solcher
Programme im Terminal erst weiterarbeiten, wenn das betreffende Programm been-
det wird.
leafpad meine - datei. txt &
Ein Kommando nachträglich zum Hintergrundprozess machen
Nicht i mmer ist im Vorhinein erkennbar, dass die Ausführung eines Kommandos
längere Zeit dauern wird. Mitunter werden Sie das Zeichen
& auch ganz einfach ver-
gessen. Das ist kein Problem! In solchen Fällen können Sie die Programmausführung
mit
(Strg)+(Z) unterbrechen und das betroffene Kommando anschließend einfach
durch
bg im Hintergrund fortsetzen.
Mehrere Kommandos ausführen
Um mehrere Kommandos hintereinander auszuführen, trennen Sie die Kommandos
einfach durch Strichpunkte:
cmd1 ; cmd2 ; cmd3
121