a, b und c seien beliebige Kommandos. Welche der folgenden
Aufrufe sind nicht syntaktisch korrekt? (Geben Sie alle zutreffenden
Antworten an.)
a | b | c
a | a
a | > /tmp/datei | b
a |
a & | b
a | b &
LPI-Lernziel Ströme, Pipes und Umleitungen verwenden (103.4)
Hinter einem Pipe-Symbol (|) muss noch ein Kommando kommen, es darf nicht
einfach einzeln am Ende der Kommandozeile stehen. Sie sollten also Antwort
4 angekreuzt haben, da dieser Aufruf nicht korrekt ist.
Außerdem sollte Ihnen Antwort 5 spanisch vorgekommen sein, da es nicht
erlaubt ist, ein Teilkommando einer Pipeline in den Hintergrund zu schicken.
Sie dürften allenfalls mit etwas wie a | b & (siehe Antwort 6)
die komplette Pipeline im Hintergrund ausführen. Auch Antwort 5 ist
also anzukreuzen.
Alle anderen Aufrufe sind dagegen absolut erlaubt. Antwort 1 ist sowieso
reine Hausmannskost. Es ist auch nicht verboten, die Ausgabe eines Programms
als Eingabe an eine andere Instanz desselben Programms zu leiten (Antwort
2), auch wenn uns das nicht fürchterlich sinnvoll vorkommt. Es ist aber
nützlich, um in Beispielfragen Verwirrung zu stiften. Antwort 6 haben
wir schon weiter oben die Absolution erteilt. Was Antwort 3 angeht: Sie
können in Bourne-artigen Shells wie der Bash durchaus eine Ausgabeumleitung
ohne eigentliches Kommando angeben, um die Zieldatei der Umleitung als
leere Datei neu anzulegen -- etwa wenn Sie zu faul sind, touch zu tippen.
(In der C-Shell funktioniert das übrigens nicht.) In der Mitte einer
Pipeline hat das nicht wirklich etwas zu suchen, da an dieser Stelle der
Datenfluss der Pipeline unterbrochen wird: Die Ausgabeumleitung kümmert
sich nicht um die Ausgabe des vorigen Kommandos, da sie keine
Standardeingabe hat, und da die Ausgabe ja in die Datei geht, kann auch
das nachfolgende Kommando nichts von seiner Standardeingabe lesen. Trotzdem
ist Antwort 3 rein formal korrekt; die Shell lehnt sie nicht ab, auch
wenn bei der Ausführung möglicherweise merkwürdige Dinge passieren.
Nicht angemeldet