Inhaltsverzeichnis
Wie bei MSDOS, so können auch unter Unix die Ein/Ausgabedatenströme eines Programmes in Dateien umgeleitet werden. Jedes Programm verfügt automatisch über drei Kanäle, Standard-Eingabe (stdin), Standard-Ausgabe (stdout) und Standard-Fehlerausgabe (stderr). Normalerweise ist stdin mit der Tastatur verbunden, stdout und stderr sind dem Monitor zugeordnet.
1. Umleitungen der Standard Ein- und Ausgabe
Die einfachen Umleitungen beziehen sich zunächst auf stdin und stdout. Folgende Umleitungen sind möglich:
Programm > Datei | Die Standard-Ausgabe des Programms wird in die Datei umgelenkt, statt auf dem Monitor dargestellt. Falls die Datei schon existiert, wird sie überschrieben. |
Programm >> Datei | Die Standard-Ausgabe des Programms wird in die Datei umgelenkt, statt auf dem Monitor dargestellt. Falls die Datei schon existiert, wird die Ausgabe an di bestehende Datei hinten angehängt. |
Programm < Datei | Die Standard-Eingabe des Programms wird aus der Datei gelesen statt von der Tastatur. |
Programm << EOM … EOM | Die Standard-Eingabe des Programms wird aus dem Block zwischen den beiden EOM-Marken gelesen, statt von der Tastatur. (Here-Dokument) |
2. Umleitung der Standard–Fehlerausgabe
Die drei Standard–Kanäle von Programmen sind mit Nummern versehen, die bei der Umleitung mitverwendet werden können. Damit ist es möglich, auch die Standard–Fehlerausgabe umzuleiten. Folgende Nummern sind grundsätzlich gültig:
2.1 Einfache Umleitung des Fehlerkanals
Durch das Voranstellen der Nummer des Standard-Fehlerausgabe-Kanals (2) vor das Umleitungssymbol wird statt der Standard-Ausgabe eben die Fehlerausgabe umgeleitet:
Programm 2> Datei | Die Standard-Fehlerausgabe des Programms wird in die Datei umgeleitet. |
2.2 Bündelung von Standard-Ausgabe und Standard-Fehlerausgabe
Es ist auch möglich, beide Ausgabekanäle zu bündeln, um sie dann in eine Datei umzuleiten. Dazu wird die Konstruktion 2>&1 benutzt. Aber Vorsicht, um wirklich beide Kanäle in eine Datei umzuleiten muß die Bündelung nach der eigentlichen Umleitung vorgenommen werden. Also:
Programm > Datei 2>&1 | Die Standard-Fehlerausgabe des Programms wird zusammen mit der Standard-Ausgabe des Programms in die Datei umgeleitet. |
3. Piping
Es ist auch möglich, die Standard-Ausgabe eines Programms gleich direkt mit der Standard-Eingabe eines anderen Programms zu verbinden, ohne den Umweg über eine Datei. Dazu wird das Pipe-Symbol (|) benutzt.
Programm1 | Programm2 | Die Standard-Ausgabe von Programm1 wird mit der Standard-Eingabe von Programm2 verbunden. |
Vereinfacht könnte man sagen, die folgenden Konstruktionen wären also äquivalent:
Programm1 | Programm2 | Programm1 > Datei Programm2 < Datei rm Datei |
4. T-Stücke in einer Pipe
Die Ausnutzung komplexer Pipekonstruktionen erfordert es oft, dass einzelne Zwischenschritte während des Ablaufs in eine Datei gespeichert werden. Dazu gibt es das Programm tee, das einfach seine Standard-Eingabe auf seine Standard-Ausgabe weitergibt, daneben aber auch den Datenstrom in eine Datei zwischenspeichert.
Das folgende Konstrukt gibt ein Beispiel für die Anwendung:
Programm1 | tee Datei1 | Programm2 | tee Datei2 | Programm3 > Datei3
Das Programm1 schickt seine Ausgabe an das Programm tee, das sie dann in die Datei1 schreibt, aber gleichzeitig auch wieder an das Programm2 weitergibt. Dieses Programm gibt wiederum seine Ausgabe auf eine weitere Instanz von tee weiter, welches sie wieder in die Datei2 schreibt und an das Programm3 weiterleitet. Das dritte Programm schließlich speichert sein Ergebnis in der Datei3. Wir haben also alle Zwischenergebnisse einzeln gespeichert, also das gleiche Ergebnis, als hätten wir geschrieben:
Programm1 > Datei1
Programm2 < Datei1 > Datei2
Programm3 < Datei2 > Datei3