next up previous contents index
Next: Pipelines Up: bash Previous: Quotierung

Ein-/Ausgabe-Umleitung

   Jedes Programm erhält automatisch beim Start drei offene ``Datenkanäle'': die Standardeingabe, die Standardausgabe und die Standardfehlerausgabe.

Bevor eine Kommandozeile ausgeführt wird, können die bestehenden Eingabe- und Ausgabekanäle umgelenkt, sowie neue erzeugt werden. Auf diese Weise können Dateien im Dateisystem zum Lesen bzw. Schreiben für das Kommando geöffnet werden, die nach dessen Beendigung automatisch wieder geschlossen werden. Beispielsweise kann so die Ausgabe des ls-Kommandos zur weiteren Bearbeitung in eine Datei geschrieben werden.

Wenn mehrere Kanalumlenkungen in einer Kommandozeile auftauchen, werden sie der Reihe nach von links nach rechts ausgewertet.

Wenn in einer der folgenden Beschreibungen die Kanalnummer einer Datei nicht angegeben wird, so wird bei einer Eingabeumleitung die Standardeingabe (Kanal 0) und bei einer Ausgabeumleitung die Standardausgabe (Kanal 1) umgeleitet.

Das auf den Umleitungsoperator folgende Wort wird allen möglichen Parametererweiterungen unterworfen. Wenn durch die Erweiterung mehr als ein Wort entsteht, wird eine Fehlermeldung ausgegeben.

Mit Hilfe des exec-Shellkommandos kann auch die Eingabe/Ausgabe der aktiven Shell umgelenkt werden, indem exec ohne Kommando, aber mit entsprechenden Umleitungen aufgerufen wird (-> exec, Seite gif).

Wenn in einem Kommando mehrere Umleitungen gelegt werden, ist die Reihenfolge signifikant. Ein Beispiel hierfür ist bei der Verdoppelung der Dateikennung auf Seite gif gegeben.

Eingabeumleitung

 

[ n]< Wort

erzeugt entweder eine Eingabeumleitung von der mit dem (erweiterten) Wort bezeichneten Datei auf den Kanal mit der Nummer n, oder auf die Standardeingabe (Kanal 0), wenn keine Zahl n angegeben wird.

Ausgabeumleitung

 

[ n]> Wort

lenkt den Ausgabekanal mit der Nummer n auf die mit dem Wort bezeichnete Datei um. Wenn keine Zahl für die Kanalnummer angegeben ist, wird die Standardausgabe (Kanal 1) angenommen.

Wenn die angegebene Datei nicht existiert, wird sie erzeugt. Wenn eine Datei dieses Namens existiert, wird sie überschrieben, solange die Shellvariable noclobber nicht gesetzt ist.

Anfügen der Ausgabe an eine existierende Datei

[ n]>> Wort

öffnet die Datei mit dem angegebenen Namen zum Anhängen von Daten. Die Daten aus dem Ausgabekanal mit der Nummer n werden an die Datei angehängt. Wenn die Kanalnummer fehlt, wird die Standardausgabe umgelenkt.

Wenn die Datei nicht existiert, wird sie erzeugt.

Zusammenfassung der Standardausgabe mit der Standardfehlerausgabe

 

&> Wort oder
>& Wort

legt die Kanäle für die Standardausgabe und die Standardfehlerausgabe zusammen und schreibt sie in eine Datei namens Wort. Von den beiden Formen sollte die erste bevorzugt werden.

Shellscript-Dokumente

 

<<[-] Wort
Dokument
Begrenzer

Diese Art der Kanalumlenkung wird benutzt, um einen Teil des Shellscripts direkt als Standardeingabe für ein Kommando zu benutzen. Es werden alle Zeilen des Dokumentes gelesen und als Eingabe an das Kommando weitergeleitet, bis eine Zeile auftaucht, die nur den Begrenzer enthält. Das in der ersten Zeile festgelegte Wort wird keiner Erweiterung unterzogen. Wenn es aber irgendeine Art der Quotierung enthält, ist der Begrenzer das Wort ohne die Quotierung. In diesem Fall wird aber das Dokument ohne jede Erweiterung an das Kommando weitergegeben. Anderenfalls (wenn das Wort keine Quotierung enthält) werden alle Parameter im Dokumenttext erweitert und es wird die Kommandosubstitution durchgeführt.

In dem zweiten Fall wird ein durch das Fluchtsymbol `\' eingeleitetes Zeilenende ignoriert. Um das Fluchtsymbol selbst sowie die Zeichen $ und ' im Dokument darstellen zu können, müssen sie ebenfalls durch ein Fluchtsymbol eingeleitet werden.

Wenn das optionale Minuszeichen bei der Einleitung des Shellscript-Dokumentes auftaucht, werden alle Leerzeichen und Tabulatoren am Anfang der Dokumentzeilen ignoriert. Dadurch kann das Dokument durch Einrückung deutlich von dem übrigen Shellscript abgesetzt werden, ohne daß diese Einrückung auch in der Ausgabe erscheint.

Verdoppelung der Dateikennung

[ n]< & Wort
kopiert die in Wort enthaltene (ganzzahlige) Eingabedateikennung. Es wird die neue Dateikennung n als Eingabekanal erzeugt oder eine existierende Kennung überschrieben.

Wenn im Wort anstelle einer Zahl ein `-' steht, wird der Kanal n geschlossen. Wenn das Wort leer ist, wird es durch die Standardeingabe ersetzt.

[ n]> & Wort
verdoppelt die Ausgabedateikennung in Wort. Wenn das Wort leer ist, wird hier die Standardausgabe eingesetzt. Ansonsten ist die Funktion die gleiche wie bei der Verdoppelung der Eingabekennung.

Ein Beispiel soll die Funktion der Verdoppelung verdeutlichen:  

Die Konstruktion

$ ls /usr/local/foo > inhalt 2>&1
$ cat inhalt
ls: /usr/local/foo: No such file or directory
$ _
lenkt die Standardausgabe und die Standardfehlerausgabe in die Datei inhalt um.

Die Konstruktion

$ ls /usr/local/foo 2>&1 > inhalt
ls: /usr/local/foo: No such file or directory
$ cat inhalt
$ _
lenkt dagegen nur die Standardausgabe in die Datei inhalt um.

Beim ersten Beispiel wird zuerst die Standardausgabe in die Datei umgelenkt, danach wird der Standardausgabekanal verdoppelt und dabei die Standardfehlerausgabe ersetzt. Im zweiten Beispiel wird zuerst die Standardfehlerausgabe durch die Standardausgabe ersetzt. Das ist in diesem Moment aber noch der Bildschirm. Erst danach wird die Standardausgabe mit der Datei verbunden. Die Kopie des Standardausgabekanals (die Standardfehlerausgabe) wird von dieser Umlenkung aber nicht betroffen!

Öffnen einer Datei zum Lesen und Schreiben

[ n]<> Wort
öffnet die im Wort benannte Datei zum Lesen und Schreiben.



next up previous contents index
Next: Pipelines Up: bash Previous: Quotierung



Linux Anwenderhandbuch -- Copyright 1993, 1994, 1995 S. Hetze, D. Hohndel, O. Kirch, M. Müller