Ein- und Ausgabeumlenkung
CIP Index Up Left Right

Ein- und Ausgabeumlenkung

Sehr viele Programme erwarten Eingaben von der Tastatur und geben Ergebnisse oder Fehlermeldungen auf den Bildschirm aus. Bei den meisten dieser Programme kann man mit der Shell die Eingaben oder Ausgaben in eine Datei umlenken.

D.h. immer wenn normalerweise ein Zeichen von der Tastatur gelesen würde, wird es nun aus der angegebenen Datei gelesen - ebenso kann man umgekehrt alles in eine Datei schreiben, was sonst auf dem Bildschirm erscheinen würde.

Die Eingabe wird umgelenkt, indem man an die Kaommandozeile < filename (Kleinerzeichen, gefolgt von dem Namen der gewünschten Eingabedatei) anhängt. Alle Eingabezeichen werden dann aus der Datei filename gelesen.

Bei der Ausgabe muß man zwei Kanäle unterscheiden: Normale Ausgabe (stdout) und Fehlermeldungen (stderr). Diese werden nämlich von Programmen unterschiedlich ausgegeben: normale Ausgabe auf Kanal 1, Fehler auf Kanal 2.

Hängt man einfach > filename an eine Kommandozeile an, so wird nur die normale Ausgabe umgelenkt, die Fehlermeldungen erscheinen weiterhin am Terminal. Will man die Fehlermeldungen in der gleichen Datei, hängt man >& filename an.

Benutzt man nur >, wird immer eine neue Datei angelegt, d.h. eine evtl. bereits existierende wird gelöscht Es sei denn, man setzt die Shell-Variable noclobber). Möchte man die Ausgabe an eine bestehende Datei nur anhängen, so benutze man den >> - Operator.

E/A-Umlenkung in der Bourne Shell

Da die Bourne-Shell etwas mehr Möglichkeiten als die csh bezüglich der Ein- bzw. Ausgabeumlenkung bietet, soll dies auch noch kurz beschrieben werden. Näheres dazu in man sh (bzw. sh-bourne auf HPs), Abschnitt "Input/Output".

Das Grundprinzip ist dasselbe, d.h. Umleitung stdin durch Anhängen von < filename, stdout durch > filename bzw. >> filename für append-Modus. Die Unterschiede beginnen jedoch bei den anderen Kanälen, bzw. wenn man mehrere Kanäle umleiten möchte.

Man kann jeden Kanal (nicht nur 0=stdin, 1=stdout, 2=stderr) umleiten, indem man hinter das Umleitungszeichen ein &number angibt. Zusätzlich kann man direkt vor dem Umleitungszeichen die Nummer des umzuleitenden Kanals (d.h. den filedescriptor) angeben. Die Reihenfolge der Umleitungen ist dabei signifikant, siehe erstes der Beispiele:

   ls path 1>xxx 2>&1
   ls path 2>&1 1>xxx
   ls path 1>out 2>err
Beispiel 1 leitet stdout und stderr in die Datei xxx um. Den gleichen Effekt würde man in der csh mit ls path >& xxx erreichen. Im zweiten Beispiel erfolgt die Fehlerausgabe auf den Kanal, der vorher stdout war (z.B. das Terminal), nur stdout wird in eine Datei umgelenkt. Das dritte: stdout und stderr in verschiedene Dateien umleiten, ist mit csh nicht möglich.

Siehe auch:
Standard-Kanäle stdin, stdout, stderr