Der unbekannte Befehl – „tee“ das T-Stück

tee ist ein Befehl der praktisch nie alleinstehend benutzt wird sondern immer in Kombination mit anderen Befehlen und einer Pipe. Der Name tee leitet sich tatsächlich aus dem T-Stück bei Rohren ab. Normalerweise kennt Linux/Unix einen stdin, stdout und stderr als drei Kanäle. stdin ist der Eingabekanal, stdout der Ausgabekanal und stderr der Fehlerkanal. Im Zusammenhang mit tee spielt das eine wichtige Rolle denn tee ist sozusagen ein T-Stück für die Ausgabekanäle stdout und stderr. Normalerweise liest ein Befehl über den stdin ein und gibt über die beiden Ausgabekanäle aus welche oft der Bildschirm ist. Durch eine Pipe | kann die Ausgabe an weitere Befehle umgeleitet werden. So wird z.B. oft eine unübersichtliche Anzeige von ls an den Pager more weitergeleitete:

$ ls | more

und man erhält eine bildschirmseitenabhängige Ausgabe. Wenn man zwei Ausgabekanäle bedienen möchte dann kommt tee ins Spiel.

Die Man-Page von tee beschreibt das eigentlich schon sehr prägnant:

tee - Von Standardeingabe lesen und in Standardausgabe und Dateien schreiben

Die Standardeingabe ist hier i.d.R. ein durch eine Pipe verbundener Befehl. Hier werde ich nur echo stellvertretend für andere Befehle benutzen da es sehr einfach ist das Prinzip zu erkennen. Die Zeile:

$ echo "Dies ist ein Text"
Dies ist ein Text

gibt nur den Text zwischen den Anführungsstrichen auf dem Bildschirm (stdout) aus. Will man jedoch sowohl auf dem Bildschirm als auch in einer Datei schreiben so kommt tee zum Einsatz:

$ echo "Dies ist ein Text" | tee Beispiel.txt
Dies ist ein Text
$ ls
Beispiel.txt
$ cat Beispiel.txt 
Dies ist ein Text

Der Text wurde auf dem Bildschirm ausgegeben und in die Datei Beispiel.txt geschrieben. Sollte die Datei Beispiel.txt bereits vorhanden sein so wird sie überschrieben. Dies kann man durch die Option -a verhindern:

$ echo "Dies ist ein neuer Text" | tee -a Beispiel.txt
Dies ist ein neuer Text
$ cat Beispiel.txt 
Dies ist ein Text
Dies ist ein neuer Text

Man kann die Standardausgabe Bildschirm natürlich auch wieder in eine Pipe umlenken:

echo "Dies ist ein Text" | tee Beispiel.txt | rev
txeT nie tsi seiD
$ cat Beispiel.txt 
Dies ist ein Text

Hier wird der Text wieder in die Datei geschrieben und zusätzlich an rev per Pipe umgelenkt. rev dreht einfach nur die Zeichenkette um.

Durch Angabe weiterer Dateinamen kann die Ausgabe auch in mehrere Dateien umgelenkt werden.

kais-universum.de