Mittwoch, 23. Februar 2011

Shellskript Programmierung - Teil 5 (Pipes/Ausgabeumlenkung)

(Date/Datum: 080218-20:37, Hits: 2533) Ein in all unseren Linuxbüchern ausführlichst behandeltes Thema sind so genannte Pipes. Pipes sind eine äußerst einfache Form der Kommunikation zwischen Prozessen. Man bezeichnet dies auch als Inter-Process-Communication (IPC). Hier eine kleine Einführung, denn Pipes sind in der grundlegenden Anwendung eigenltich ganz einfach zu verwenden und gleichzeitig äußerst nützlich.

Funktionsweise

Eine Pipe dient dazu die Ausgabe eines Programms aufzunehmen und an ein anderes Programm weiterzuleiten. Gibt ein Programm 'A' eine Zahl aus, so wird diese an Programm 'B' als Eingabe weitergereicht.

Schreibweise

Man schreibt eine Pipe mit dem |-Zeichen, dass sich auf deutschen Tastaturen meist neben der 'Y'-Taste befindet. Zusammengedrückt mit der Taste 'ALT' erscheint das Zeichen auf dem Bildschirm.

Die Anwendung schreibt sich nun folgendermaßen:
$ Programm1 | Programm2
Dabei wird die Ausgabe des ersten als Eingabe des zweiten Programms verwendet.

Beispiel Hier nun ein Beispiel: Es soll die Ausgabe von 'ls' an das Programm 'grep' weitergeleitet werden, dass die Eingabe nach bestimten Ausdrücken untersucht und diese herausfiltert.

Wir möchten nun alle Dateien sehen, die ein 'a' beinhalten:

$ ls | grep a
...


'ls' gibt die Dateiliste aus und 'grep' sucht alle Zeilen mit einem 'a' heraus. Wie gesagt: Die Verwendung von Pipes ist kinderleicht.

Ausgabeumlenkung

Normalerweise wird nur die Standardausgabe in eine Pipe geleitet, möchte man nun aber die Fehlerausgabe ebenfalls in eine Pipe leiten, so empfiehlt sich eine Ausgabeumlenkung.

$ ls /datei-existiert-nicht 2>&1 | grep a


Hier würde grep auch die Fehlermeldung der nicht existierenden Datei als Eingabe geliefert bekommen. Die Schreibweise 2>&1 heißt in diesem Fall, dass die Standardfehlerausgabe (Deskriptor 2) in die Standardausgabe (Deskriptor 1) eingehängt werden soll.

Weiteres

In unserem Buch 'Linux. Das distributionsunabhängige Handbuch' gehen übrigens noch auf die Systemprogrammierung (in C) mit Pipes ein. Und zwar im Kapitel zum Thema 'Prozesse und IPC' (ich tippe mal auf Seite 700-900, was ich im Moment nicht überprüfen kann, da ich im Rechenzentrum der Hochschule sitze).

Keine Kommentare:

Kommentar veröffentlichen