Zum Inhalt springen

Umleitung

Mit Umleitungsoperatoren werden die Standard-Kanäle eines Programms mit Dateien verbunden – statt mit Terminal oder Tastatur.

Terminal-Fenster
ls /etc > ausgabe.txt # stdout in Datei schreiben (überschreibt)
ls /etc >> ausgabe.txt # stdout anhängen (append)

> legt die Datei neu an oder überschreibt sie. >> hängt an eine bestehende Datei an – ist sie nicht vorhanden, wird sie angelegt.

Terminal-Fenster
sort < unsortiert.txt # sort liest aus Datei statt von Tastatur
wc -l < protokoll.txt # wc zählt Zeilen in der Datei

In der Praxis selten nötig, da die meisten Befehle Dateien direkt als Argument akzeptieren – sort unsortiert.txt ist gleichwertig. Nützlich wird < in Skripten und bei Befehlen, die keine Dateiargumente kennen.

Terminal-Fenster
find / -name "*.conf" 2> fehler.txt # Fehlermeldungen in Datei
find / -name "*.conf" 2> /dev/null # Fehlermeldungen verwerfen

/dev/null ist ein spezielles Gerät, das alles geschriebene stillschweigend verwirft – das “Schwarze Loch” des Systems.

Terminal-Fenster
befehl > alles.txt 2>&1 # stderr auf stdout umlenken, beide in Datei
befehl &> alles.txt # Kurzform (bash): beide Kanäle in Datei
befehl &>> alles.txt # beide Kanäle anhängen

2>&1 bedeutet: “Kanal 2 (stderr) auf dasselbe Ziel wie Kanal 1 (stdout) lenken.” Die Reihenfolge ist wichtig – 2>&1 muss nach der stdout-Umleitung stehen:

Terminal-Fenster
befehl > datei.txt 2>&1 # korrekt: erst stdout auf datei.txt, dann stderr dorthin
befehl 2>&1 > datei.txt # falsch: stderr geht auf Terminal, stdout in Datei
Terminal-Fenster
befehl > /dev/null # Ausgabe unterdrücken, nur Fehler sichtbar
befehl > /dev/null 2>&1 # komplett lautlos ausführen

Typischer Einsatz in Skripten, wenn ein Befehl nur wegen seines Exit-Codes ausgeführt wird und die Ausgabe nicht interessiert.

OperatorBedeutung
>stdout in Datei (überschreiben)
>>stdout in Datei (anhängen)
<stdin aus Datei
2>stderr in Datei
2>/dev/nullstderr verwerfen
&>stdout + stderr in Datei
2>&1stderr auf stdout umlenken