12. Pipes und andere Besonderheiten
===================================
Ein- und Ausgabe-Umlenkung
|
| next | back | WS 2015/16 - 1 |
UNIX: Small is beautiful.
Es existieren viele kleine Programme, die jeweils eine kleine Aufgabe sehr
gut machen. Eine große Aufgabe wird durch die Nacheinanderausführung von
verschieden kleinen Programmen gelöst.
Problem: Wie erfolgt der Datentransport von einem Programm zum anderen?
Jedes Programm hat bei seinem Start drei E/A-Kanäle geöffnet,
die es sofort benutzen kann.
Standardeingabe - Eingabekanal für Daten
Standardausgabe - Ausgabekanal für Ergebnisse
Standarderror - Ausgabekanal für Fehlertexte
Die E/A-Kanäle werden von den Shells verwaltet (wenn die Kommandos
von der Shell aus gestartet werden).
Standardmäßig legen die Shells die Standardeingabe auf die Tastatur.
Standardausgabe und Standarderror werden von den Shells auf den
Bildschirm gelegt.
|
| next | back | WS 2015/16 - 2 |
Umlenkung von Standardausgabe und Standardeingabe
-------------------------------------------------
Standardeingabe und Standardausgabe können von den Shells auf Files
umgelenkt werden, so daß ein Programm dann die Eingabedaten aus einem
File bzw. die Ausgabedaten in ein File schreibt.
> - Umlenkung der Ausgabedaten
> <Filename des Ausgabefiles>
Achtung!!! Das Ausgabefile wird ohne Warnung überschrieben, wenn es
bereits existiert.
< - Umlenkung der Eingabedaten
< <Filename des Eingabefiles>
Das Eingabefile muß existieren.
Beispiel:
ls -lisa > xxx
more < xxx
Die Programm more, less, tail, od lesen ihre Eingabe von Standardeingabe,
wenn kein Filename angegeben wurde.
|
| next | back | WS 2015/16 - 3 |
Umlenkung von Standardfehlerausgabe
-----------------------------------
Umlenkung der Standardfehlerausgabe kann nur bei Bourne Shell, Bash und
Kornshell erfolgen.
2> <Ausgabefilename>
Soll bei einer Ausgabeumlenkung das Ausgabefile nicht überschrieben
werden, ist folgendes zu notieren:
>> <Ausgabefilename>
bzw.
2>> <Ausgabefilename>
|
| next | back | WS 2015/16 - 4 |
Die Pipe im Unix
----------------
Die Pipe dient der Verkettung von Programmen. Dabei wird die Standard-
ausgabe des ersten Programms mit der Standardeingabe des zweiten Programms
verbunden. Beide Programme werden parallel gestartet und laufen dann
anschließend parallel ab, so daß die Ausgabedaten des ersten Programms
direkt als Eingabedaten vom zweiten Programm genutzt werden können.
Bei der Benutzung der Shells wird eine Pipe mittels
"|"
kodiert.
<Kommando 1> | <Kommando 2>
Natürlich kann man beliebig viele Kommandos über mehrere Pipes
verbinden.
<Kommando 1> | <Kommando 2> | <Kommando 3> | <Kommando 4> | ....
Beispiel:
ls -lisa
ls -lisa | more
ls -lisa | grep 2003-10 | more # Linux
ls -lisa | grep Oct | more # Solaris
|
| back | WS 2015/16 - 5 |