Linux-Workshop

Shell Scripting - Abläufe automatisieren

03.05.2013
Von Thomas Steudten

Pipe - Prozesse verknüpfen

Jeder gestartete Prozess hat im Minimum drei Datei-Handles (Filedescriptoren) offen:

  1. Standard-In (stdout): Eingabe Handle ID 0

  2. Standard-Out (stdin): Ausgabe Handle ID 1

  3. Standard-Err (stderr): Fehlerausgabe Handle ID 2

Die Ausgabe des einen Prozesses kann mit der Eingabe eines anderen Prozesses verknüpft werden. Hier liegen gerade die Stärken von Linux. Der Shell teilt man dies mittels der so genannten Pipe "|" mit. Damit wird die Shell angewiesen, beide Prozesse auszuführen und die Dateihandles miteinander zu verbinden.

Beispielsweise zeigt die Folge "cat /etc/passwd | grep --color root" alle Zeilen in /etc/passwd, die die Zeichenfolge "root" enthalten. "cat" gibt alle Zeilen auf stdout aus, "grep" liest von stdin. Bei einem so einfachen Bespiel liese sich dies natürlich zu "grep -color root /etc/passwd" optimieren.

Eine ganze Kette von Filtern kann so aufgebaut werden:

cmd1 | cmd2 | cmd3 | .. | cmdn

Möchte man stderr und stdout jeweils in eine andere Datei umleiten, dann geht dies per "cmd 2> error.txt > out.txt". Eine kombinierte Version in nur eine Datei wäre "cmd > errout.txt 2>&1". Die Syntax dabei ist folgende:

  1. Verknüpfe stdout von cmd mit der Datei "errout.txt"

  2. Leite stderr dahin um, wohin stdout zeigt