Next: Filenamengenerierung Up: Bourne-Shell als Kommando- und Previous: Standard- E/A und Fileumlenkung
Pipelineverarbeitung
-
Eine Pipeline (pipe) entsteht, wenn die Standardausgabe eines Programmes mit der
Standardeingabe eines anderen Programmes verknüpft wird:
...cmdi cmdi+1 ...
allgemein:
cmd1 cmd2 ... cmdn -
Pipelines kann man sich vorstellen als einen Datenstrom, der durch verschiedene Programme
(Filter) hindurchläuft.
-
Beispiel:
$ who | wc -l $ ls | wc -l $ ls -l | grep '^[Dd]' $ ls | pr -3 | lpr
-
Bemerkungen:
- wc, grep,pr sind Filter
- ls ist kein Filter nur als erstes Element einer Pipeline möglich
- falls Ausgabe sowohl auf stdout als auch in ein File geschrieben werden soll: tee (T-Verbindung)
-
Vergleich zur Methode der Fileumlenkung:
$ ls >tmpfile; wc -l <tmpfile; rm tmpfile
liefert (fast) das gleiche Ergebnis wie$ ls | wc -l
aber:- Pipeline-Methode ist einfacher und bequemer
- tmpfile wird durch Shell vor Aufruf von ls erzeugt ein File mehr im aktuellen Verzeichnis (evtl. Problem: Berechtigung, Files im akt. Verzeichnis zu erzeugen!)
- ls und wc werden synchron von der Shell gestartet, die zu einer Pipeline gehörenden Programme werden parallel abgearbeitet, die Datenübergabe erfolgt über interne Puffer (evtl. warten)
-
Beispiel:
-
Pipelines sind eine Grundlage für das Tool-Konzept im UNIX:
- kleine, überschaubare Programme für einen bestimmten Zweck; komplexere Aufgaben können leicht durch Kombination der Programme gelöst werden
-
Beispiel:
- anstelle ls mit spezieller Option ,,Anzahl der Files`` und who mit der Option ,,Anzahl der Nutzer`` können beide Programme mit wc kombiniert werden
- dto. bzgl. Mehrspaltendruck usw.
-
Bemerkungen:
- Programme merken nicht, daß sie Bestandteil einer Pipeline sind
- Sie müssen (bis auf das erste) von der Standardeingabe lesen und auf die Standardausgabe (bis auf das letzte) ausgeben
- Konvention: Lesen der Standardeingabe, falls bei Aufruf kein Filename-Argument angegeben wird (z.B. sort, grep, wc)
- (fast) nie bedeutet die Angabe eines Filename-Argument das Ausgabefile des Programmes ! (Ausnahme: tee)
-
Forderung an Filter:
- Trennung ,,normale`` Ausgabe von Fehlernachrichtenausgabe
- Keine Überschriftenausgabe und dergleichen in das Programm ,,verdrahten``
Next: Filenamengenerierung Up: Bourne-Shell als Kommando- und Previous: Standard- E/A und Fileumlenkung