Ekkard Gerlach wrote:
Hallo,
was ist besser: [...] >/dev/null 2>&1 oder [...] 2>&1 >/dev/null?
Beides funktioniert ja scheinbar.
Ja, beides funktioniert, allerdings unterschiedlich. Als Beispiel hier ein Skript namens redir.sh mit folgendem Inhalt: #!/bin/bash echo "This is stdout." >&1 echo "This ist stderr." >&2 1. Versuch: $> ./redir.sh This is stdout. This ist stderr. $> 2. Versuch: $> ./redir.sh 1> /dev/null This ist stderr. $> 3. Versuch: $> ./redir.sh 2> /dev/null This is stdout. $> 4. Versuch: $> ./redir.sh &> /dev/null $> 5. Versuch: $> ./redir.sh > /dev/null 2>&1 $> 6. Versuch: $> ./redir.sh 2>&1 > /dev/null This ist stderr. $> Versuch 1 bis 3 duerften logisch erscheinen. Bei Versuch 4 werden beide Ausgaben nach /dev/null geschickt, das Ergebnis ist daher auch noch logisch. Interessanter sind die Versuche 5 und 6. Wie Du siehst, haengt es hier von der Reihenfolge der Umleitung ab! Versuch 5 ist quasi identisch zu Versuch 4. Versuch 4 kann uebrigens auch als "./redir.sh >& /dev/null" geschrieben werden, was allerdings IMHO nicht ganz so gut zu lesen ist. Versuche 5 und 6 sind eigentlich wirklich die in- teressantesten (und danach zielte ja auch Deine Frage): Bei Versuch 5 wird stdout _und_ stderr nach /dev/null ge- schickt, waehrend bei Versuch 6 _nur_ stdout in /dev/null wandert (stderr erscheint, wie man oben auch sehen kann) weiterhin an der Konsole. Begruendung: Bei Versuch 5 wird zunaechst die Standardausgabe stdout nach /dev/null umgeleitet und nachfolgend die Standardfehlerausgabe stderr dorthin ge- lenkt, wohin auch stdout zeigt (und das ist /dev/null, also verschwindet auch stderr in /dev/null). Bei Versuch 6 hingegen zeigt im Augenblick der Umleitung der Fehlerausgabe stderr die Standardausgabe stdout noch auf die Konsole. Also zeigt stderr nun ebenso auf die Konsole; erst im Anschluss wird die Stan- dardausgabe stdout nun mittels ">" nach /dev/null umgeleitet, so bleibt aber stderr auf der Konsole uebrig. Alle Klarheiten beseitigt? ;-) Gruesse, Th. PS: Wenn Du sowohl stdout als auch stderr nach /dev/null schicken willst, nimm einfach "&> /dev/null"...