Beispiel: Man möchte sich das Listing eines grosen Dateiverzeichnisses (z.B. /home/cip/91) anschauen, ohne daß die Zeilen oben am Bildschirm verschwinden. Wir brauchen also das Kommando ls, um das Directory zu listen. Natürlich hätte man diesem Kommando eine Option -p oder ähnliches mitgeben können, das alle 25 Zeilen auf einen Tastendruck wartet. Dann wäre aber das Kommando noch komplizierter geworden, und die Ausgabesteuerung wäre auch nicht sehr komfortabel. Viel besser geht das mit dem Kommandos more oder less. Man könnte jetzt die Ausgabe von ls in eine Datei umlenken, und sich diese dann mit einem dieser Pager anschauen. Die Shell bietet aber einen viel einfacheren Mechanismus: Die Pipe.
Man kann die Ausgabe eines Programmes direkt als Eingabe eines anderen verwenden. Dazu schreibt man beide Kommandos in eine Zeile und plaziert dazwischen ein "|" (sprich: Pipe). Obiges Beispiel:
ls -asl /home/cip/91 | more some_prog -option |& fgrep -v "ok" | lessMan kann auf diese Weise beliebig viele Kommandos hintereinanderhängen, jedes bekommt die Ausgabe (stdout) des vorigen als Eingabe (stdin). Möchte man zusätzlich auch stderr weiterleiten, so schreibt man ein "&" hinter das Pipe-Zeichen, ansonsten wird stderr ganz normal auf der Terminal ausgegeben.
Um diese Konstrukte syntaktisch zu beschreiben, wird nun im csh Manual nicht mehr von Kommandos gesprochen, wenn eine Kommandozeile gemeint ist, sondern von Pipelines, das ist eine Folge von einfachen Kommandos, getrennt durch "|". Alle Kommandos einer Pipeline laufen parallel im Rechner, d.h. zum Beispiel, daß man sich die Ausgabe eines Programmes schon mit less anschauen kann, noch bevor das erzeugende Kommando fertig ist.
Zu unterscheiden vom Pipeline-Mechanismus ist die bedingte Ausführung, wobei einzelne Kommandos (oder Pipelines) durch "||" verbunden werden. In diesem Fall wird nicht stdout mit stdin verbunden, sondern die Kommandos ganz normal wie in einer mit ";" getrennten Sequenz gestartet mit dem Unterschied, daß das zweite nur ausgefüht wird, wenn das erste Prgramm einen Rückgabewert von ungleich 0 liefert (Fehler). Siehe auch Shell-Script.
Eine andere Möglichkeit, wie man auch mit nicht-Sohnprozessen kommunizieren kann sind named Pipes (erzeugt mit mknod), Sockets oder Shared memory. Näheres, wie immer, in AKBP-I.