Sie können mehrere Kommandos aneinanderhängen:
Mit dem Zeichen | können Sie zwei Kommandos zu einer Pipe verbinden.
Mit den Zeichen ; oder & oder && oder || können Sie mehrere Kommandos oder Pipes zu einer Kommandofolge verbinden.
Pipe
Eine Pipe ist eine Folge von zwei oder mehr Kommandos, die jeweils durch das Zeichen | verbunden sind. Eine Pipe zwischen zwei Kommandos lenkt die Standard-Ausgabe des ersten Kommandos auf die Standard-Eingabe des zweiten Kommandos um (siehe Abschnitt „Eingabe und Ausgabe eines Kommandos umlenken“). Deshalb müssen die so verbundenen Kommandos folgende Bedingungen erfüllen:
Das erste Kommando einer Pipe muss auf die Standard-Ausgabe schreiben.
Das nächste Kommando einer Pipe muss von der Standard-Eingabe lesen.
Wenn die Pipe aus mehr als zwei Kommandos besteht, müssen alle Kommandos nach dem ersten und vor dem letzten Kommando der Pipe von der Standard-Eingabe lesen und auf die Standard-Ausgabe schreiben.
Die POSIX-Shell startet alle Kommandos der Pipe gleichzeitig als eigenständige parallele Prozesse. In einem Ein-Prozessor-System kann der Prozessor aber pro Zeiteinheit immer nur einen dieser Prozesse bearbeiten. Daher wechseln sich die einzelnen Prozesse am Prozessor ab.
Nur der Prozess, der zum ersten Kommando der Pipe gehört, erhält seine Eingabe nicht von einem anderen Prozess.
Nur der Prozess, der zum letzten Kommando der Pipe gehört, leitet seine Ausgabe nicht an einen anderen Prozess weiter.
Die POSIX-Shell wartet so lange, bis das letzte Kommando der Pipe beendet ist. Erst dann bearbeitet sie weitere Eingaben.
Kommandofolgen
Eine Kommandofolge ist die Aneinanderreihung einer oder mehrerer Pipes, die durch eines der Symbole
; & && ||
getrennt und optional durch
; & |&
abgeschlossen werden. Die Symbole ; & und |& haben gleichen Vorrang, der niedriger ist als der von && und ||, die beide ebenfalls gleichen Vorrang haben. Der Strichpunkt ; nach einer Pipe steht für sequentielle Ausführung der Pipe, während das kommerzielle Und & asynchrone Ausführung bedeutet, d.h. die Shell wartet nicht auf die Beendigung der Pipe. Das Symbol |& nach einer Kommandofolge veranlasst die asynchrone Ausführung der Pipe oder des Kommandos mit einer bidirektionalen Pipe zur Vater-Shell.
Im folgenden steht der Begriff Kommando für ein Kommando oder eine Pipe. Die Zeichen haben folgende Wirkung:
Zeichen | Wirkung |
; | Die POSIX-Shell bearbeitet das nächste Kommando erst, wenn das vorausgehende beendet ist. Sie gibt aber kein Bereitzeichen aus. |
& | Die POSIX-Shell startet das vorausgehende Kommando im Hintergrund und bearbeitet sofort das nachfolgende Kommando. |
&& | Die POSIX-Shell führt das nachfolgende Kommando nur aus, wenn das vorausgehende Kommando als Endestatus den Wert 0 zurückgegeben hat. |
|| | Die POSIX-Shell führt das nachfolgende Kommando nur aus, wenn das vorausgehende Kommando als Endestatus einen Wert ungleich 0 zurückgegeben hat. |
|& | Die POSIX-Shell startet das vorausgehende Kommando im Hintergrund mit einer bidirektionalen Pipe zur Vater-Shell. |