Ein-Ausgabe Umleitung

Die Ein- und Ausgabekanäle können unter Unix/Linux umgeleitet werden:

Eingabekanal (stdin)

Jedes Programm, das auf der Kommandozeile auf Eingaben wartet, bekommt die auf der Tastatur gedrückten Zeichen über den Standardeingabekanal geschickt.

Ausgabekanal (stdout)

Die Ausgabe eines Kommandozeilenprogramms wird über den Standardausgabekanal an das Terminal gegeben und dort angezeigt.

Errorkanal (stderr)

Eventuelle Fehlermeldungen erreichen das Terminal über den Standarderrorkanal, damit die Ausgabe eines Programmes nicht mit den Fehlermeldungen vermischt wird.
Das wäre sehr unpraktisch, weil die Ausgabe eines Programms häufig von einem anderen Programm weiter bearbeitet wird.

Ausgabeumleitung

Das grösser-als Zeichen bzw. die schliessende spitze Klammer (>) deutet an, dass der Standardausgabe-Kanal eines Programms mit einer Datei verbunden werden soll.

Beispielsweise soll die Ausgabe des Kommandos ls -l /usr/bin
in die Datei programmdateien umgeleitet werden:

$ ls -l /usr/bin > programmdateien

$ ls -l /usr/bin >> programmdateien

Dieser Befehl bewirkt, dass der Standardausgabekanal für das Kommando ls -l /usr/bin mit der Datei programmdateien verbunden wird.

Wenn zwei grösser-als Zeichen hintereinder stehen bedeutet das, dass die Standardausgabe an die Datei angehängt werden soll.

Das Kommando gibt nichts am Terminal aus. Nach der Ausführung gibt es aber die Datei programmdateien im aktuellen Directory. Jetzt kann man mit der Datei weiter arbeiten.

Eingabeumleitung

Das kleiner-als Zeichen bzw. die öffnende spitze Klammer (<) deutet an, dass der Inhalt einer Datei an ein Programm weitergegeben werden soll.

Beispielsweise soll der Inhalt der Datei foo an das Programm cat gegeben werden:

$ cat < foo

Dieser Befehl bewirkt, dass der Standardeingabekanal für das Kommando cat mit der Datei foo verbunden wird.

Die Unix-Pipe

Mit dem Pipe-Symbol (|) kann man die Standardausgabe eines Programms mit der Standardeingabe eines anderen Programms verbinden.
Auf diese Weise kann man mehrere Programme hintereinander laufen lassen, die jeweils die Ausgabe ihres Vorgängers in der Kette verändern.

In den meisten Fällen werden Informationen hier verdichtet oder gefiltert.

Etwa so: (In den Programmblöcken steht I für Standardinput, O für Standardoutput und E für Standarderror. Im Beispiel wird mit der Errorausgabe nichts besonderes gemacht.)

$ programmliste > sort -u | wc -l 

Startdatei diese Datei (programmliste)

programm1 wird von sort -u sortiert, und Doppeleinträge werden entfernt, dann

pipe mit dem pipe-Symbol (|) zum nächsten Programm

programm2 wc -l weiter geleitet, was die Zeilen der Eingabe zählt. wc steht für wordcount

Ergebnis

Als Ergebnis bekommt man nur die Anzahl der verschiedenen Zeilen in der ursprünglichen Datei programmliste.

vorherige Seite Shellvariablen