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
).
Wenn in einem Kommando mehrere Umleitungen gelegt werden, ist die
Reihenfolge signifikant. Ein Beispiel hierfür ist bei der Verdoppelung
der Dateikennung auf Seite gegeben.
[
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.
[
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.
[
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.
&> 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.
<<[
-]
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.
[
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!
[
n]
<> Wort
öffnet die im Wort benannte Datei zum Lesen und Schreiben.