Springe zum Hauptinhalt

Archiv
next up previous contents
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 $\vert$ cmdi+1 ...


    allgemein:


    cmd1 $\vert$ cmd2 $\vert$ ... $\vert$ 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 $\Rightarrow$ 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 $\Rightarrow$ 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)
  • 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 up previous contents
Next: Filenamengenerierung Up: Bourne-Shell als Kommando- und Previous: Standard- E/A und Fileumlenkung