Auf gute Zusammenarbeit – wer Shellbefehle miteinander kombiniert, spielt die ganze Stärke der Kommandozeile aus. Dazu gehört nicht nur das Verketten einzelner Programme, sondern auch das Weiterleiten der Ausgaben: Scrollen die Informationen beispielsweise zu schnell über den Bildschirm, leiten Sie diese einfach in eine Datei um oder zeigen Sie seitenweise an.
Gut kombiniert
Mit wenigen Handgriffen verknüpfen Sie in der Bash einzelne Befehle miteinander. Anstelle von
$ mkdir Ordner $ cd Ordner $ cp ../Ordner2 /* .
kombinieren Sie die einzelnen Arbeitsschritte und teilen dem Interpreter über das Semikolon mit, dass er alle Befehle direkt hintereinander ausführen soll:
$ mkdir Ordner ; cd Ordner ; cp ../Ordner2 /* .
Noch mehr Kontrolle erhalten Sie, wenn Sie der Bash eine Bedingung stellen. So ist es beispielsweise möglich, einen zweiten (oder dritten oder n-ten) Befehl nur dann auszuführen, wenn ein anderes Kommando erfolgreich oder nicht erfolgreich war.
Um beispielsweise eine bestimmte Datei nur dann zu löschen, wenn sie vorhanden ist, stellen Sie dem Kommando Rm einen einfachen Test voran:
test -w Datei && rm Datei
Das gleichnamige Programm Test schaut in diesem Fall nach, ob die Datei existiert und schreibbar ist (Parameter -w); nur wenn das der Fall ist, löscht Rm diese. Wer häufig Software aus den Quellen baut und dabei den Dreierschritt ./configure; make; make install einsetzt, kann alle drei Befehle miteinander kombinieren und durch && sicherstellen, dass jeder folgende Befehl nur weitermacht, wenn der Vorgänger keine Fehler produziert hat:
./configure && make && make install
Neben der Option -w hat das Test-Kommando noch einige weitere praktische Flags zu bieten. So schauen Sie zum Beispiel mit -d nach, ob ein Verzeichnis schon existiert, und nur wenn dieses nicht der Fall ist, erstellen Sie es:
test -d Ordner || mkdir Ordner
Dabei übernehmen die zwei Pipezeichen zwischen den Befehlen die Funktion eines logischen Oder.
Kanalsystem
Insgesamt drei Kanäle gibt es für die Ein- und Ausgabe von Befehlen auf der Shell: Programme lesen ihre Daten von der Standardeingabe (STDIN, Kanal 0) oder aus einer Datei, die Programmausgaben landen auf der Standardausgabe (STDOUT, Kanal 1), und Fehlermeldungen werden auf die Standardfehlerausgabe (STDERR, Kanal 2) geschrieben:
Befehl < Eingabe > Ausgabe 2>Fehler
Die Operatoren < und > verraten dabei die Richtung: Erfolgt die Standardeingabe nicht über die Tastatur, sorgt < dafür, dass der Befehl sie beispielsweise aus einer Datei einliest. Um hingegen die Ausgabe eines Kommandos in eine Datei umzuleiten, dient der Operator >. Die Fehlerausgabe erreichen Sie ebenfalls über >, allerdings spezifizieren Sie hier den Kanal durch Voranstellen des File Descriptors (2>). Tabelle "Shell-Umleitungen" zeigt eine Übersicht der gebräuchlichsten Umleitungsszenarien, und die folgenden Abschnitte zeigen detaillierte Anwendungsbeispiele.
Shell-Umleitungen
| Kanal | Kommando | Ergebnis |
|---|---|---|
| 1 (stdout) | Befehl
> Datei
|
Schreibt die Standardausgabe von Befehl
in Datei
.
|
| 1 (stdout) | Befehl
>> Datei
|
Hängt die Standardausgabe von Befehl
an Datei
an.
|
| 2 (stderr) | Befehl
2> Datei
|
Lenkt die Standardfehlerausgabe von Befehl
in Datei
um.
|
| 2 (stderr) | Befehl
2>> Datei
|
Hängt die Standardfehlerausgabe von Befehl
an Datei
an.
|
| 1 (stdout) und 2 (stderr) | Befehl
> Datei
2>&1
|
Schreibt Standardausgabe und Standardfehlerausgabe von Befehl
in dieselbe Datei
.
|
| 1 (stdout) und 2 (stderr) | Befehl
> Datei
2> Datei2
|
Standardausgabe von Befehl
landet in Datei
, die Standardfehlerausgabe schreibt die Shell nach Datei2
geschrieben.
|
| 0 (stdin) | Befehl
< Datei
|
Leitet Datei
in Standardeingabe von Befehl
um.
|



