7.10 Umleitung und Pipes

Manchmal wäre es nützlich, die Ausgabe eines Kommandos zur weiteren Bearbeitung in eine Datei zu schreiben oder die Ausgabe eines Kommandos als Eingabe für das nächste Kommando zu verwenden. Die Shell bietet diese Funktion mithilfe von Umleitungen oder Pipes.

Normalerweise ist die Standardausgabe in der Shell der Bildschirm (oder ein geöffnetes Shell-Fenster) und die Standardeingabe erfolgt über die Tastatur. Mithilfe bestimmter Symbole können Sie die Eingabe bzw. Ausgabe an ein anderes Objekt, beispielsweise eine Datei oder ein anderes Kommando, umleiten.

Umadressierung

Mit > können Sie die Ausgabe eines Kommandos in eine Datei weiterleiten (Ausgabeumleitung). Mit < können Sie eine Datei als Eingabe für ein Kommando verwenden (Eingabeumleitung).

Pipe

Mithilfe eines Pipe-Symbols | können Sie zudem die Ausgabe umleiten. Mit einer Pipe können Sie mehrere Kommandos kombinieren, wobei die Ausgabe eines Kommandos als Eingabe für das nächste Kommando verwendet wird. Im Unterschied zu den anderen Umleitungssymbolen > und < ist die Verwendung der Pipe nicht auf Dateien beschränkt.

7.10.1 Beispiele für Umleitung und Pipe

  1. Sie schreiben die Ausgabe eines Kommandos wie ls in eine Datei, indem Sie Folgendes eingeben:

    ls -l > filelist.txt

    Dadurch wird eine Datei mit dem Namen filelist.txt erstellt, die eine Inhaltsliste des aktuellen Verzeichnisses enthält, welche Sie durch das Kommando ls erzeugt haben.

    Wenn jedoch bereits eine Datei mit dem Namen filelist.txt vorhanden ist, wird mit diesem Kommando die bestehende Datei überschrieben. Sie können dies mit >> anstelle von > verhindern. Wenn Sie Folgendes eingeben:

    ls -l >> filelist.txt 

    wird die Ausgabe des Kommandos ls einfach an eine bereits bestehende Datei mit dem Namen filelist.txt angehängt. Wenn die Datei nicht vorhanden ist, wird sie erstellt.

  2. Die Umleitung funktioniert auch umgekehrt. Anstelle einer Standardeingabe für ein Kommando auf der Tastatur können Sie eine Datei als Eingabe verwenden:

    sort < filelist.txt

    Dadurch wird das Kommando Sortieren gezwungen, die Eingabe aus dem Inhalt der Datei filelist.txt abzurufen. Das Ergebnis wird am Bildschirm angezeigt. Sie können das Ergebnis natürlich auch in eine andere Datei schreiben, indem Sie eine Kombination aus Umleitungen verwenden:

    sort  < filelist.txt > sorted_filelist.txt
  3. Wenn ein Kommando eine längere Ausgabe erzeugt, wie zum Beispiel ls -l, kann es nützlich sein, die Ausgabe an einen Viewer wie less weiterzuleiten, damit Sie durch die Seiten blättern können. Geben Sie dazu Folgendes ein:

    ls -l | less

    Die Inhaltsliste für das aktuelle Verzeichnis wird in less angezeigt.

    Die Pipe wird auch häufig in Kombination mit dem Kommando grep verwendet, um eine bestimmte Zeichenfolge in der Ausgabe eines anderen Kommandos zu suchen. Wenn Sie beispielsweise eine Liste von Dateien in einem Verzeichnis sehen möchten, dessen Eigentümer der Benutzer tux ist, geben Sie Folgendes ein:

    ls -l | grep tux