Eine mögliche Umleitung könnte beispielsweise lauten
jcb@hercules:~$ ps aux 2>&1 | grep init
Das würde bedeuten, dass sowohl die Standard- wie die Fehlerausgabe von ps auf die Standardeingabe von grep geleitet werden. Die Standard-Datenströme sind nämlich immer unter den folgenden Nummern zu erreichen:
0: stdin
1: stdout
2: sterr
Der Ausdruck 2>&1 bezeichnet also die Fehlerausgabe (2), die umgeleitet wird (>) auf die Standardausgabe (1). Das Und-Zeichen (&) steht hier, um anzudeuten, dass nicht etwa in ein File namens "1" umgeleitet werden soll, sondern in den mit der Ziffer bezeichneten Kanal.
Nehmen wir an, wir wollten die gebündelte Standard- und Fehlerausgabe zum Schluss in ein File lenken. Man könnte annehmen, so sollte es gehen:
jcb@hercules:~$ ps aux 2>&1 > testfile
Aber das wäre falsch! Was würde hier passieren? Die Fehlerausgabe von ps würde auf die Standardausgabe umgeleitet, aber beide wären zu diesem Zeitpunkt noch mit dem Terminal verbunden. Das zweite Umleitungszeichen würde nun die Standardausgabe in das File leiten, die Fehlerausgabe bliebe davon unberührt und landete nicht in dem File.
Funktionieren würde dagegen:
jcb@hercules:~$ ps aux > testfile 2>&1
Das sieht auf den ersten Blick unlogisch aus. Tatsächlich ergibt sich aber das Folgende: Die Standardausgabe wird zunächst in das File umgeleitet. Dann folgt die Umleitung der Fehlerausgabe auf die Standardausgabe, die aber nun wegen der ersten Kommandohälfte bereits mit dem File verbunden ist. Deshalb gelangen jetzt Fehler- wie Standardausgabe in das File.
Der Trick dabei ist, dass es auf das letztendliche Ziel ankommt, zu dem ein Stream geschickt wird.