Das ergibt für mich keinen Sinn.
wibble > /dev/null 2>&1
Ich denke, es wäre sinnvoller, wenn es so wäre:
wibble 2>&1 > /dev/null
Mit anderen Worten
Commands Output Sendall STDERRORS to STDOUT then SEND it all to /dev/null
Was ist der Gedanke hinter der Reihenfolge der Befehlsumleitung xxx > /dev/null 2>1
?
Akzeptierte Antwort:
Die Weiterleitungen werden von links nach rechts abgearbeitet. Wenn ja
2>&1 1> /dev/null
Die erste Weiterleitung macht stderr
zeigen Sie auf den Stream, der stdout
ist zeigt auf zu dieser Zeit (was im Wesentlichen Ihr tty ist). Es macht nicht stderr
ein Alias von stdout
.
Dann stdout
wird zum Bit-Bucket umgeleitet. Die stdout
Umleitung wirkt sich nicht auf den vorherigen stderr
aus umleiten. stderr
bezieht sich immer noch auf dein tty.
Also:
ls file_that_doesnt_exist 2>&1 1> /dev/null
wird nur die Fehlermeldung auf Ihrem Terminal ausgeben.
Die bash
Umleitungsdokumentation erwähnt dies explizit:
Beachten Sie, dass die Reihenfolge der Umleitungen wichtig ist. Zum Beispiel der Befehl
ls > dirlist 2>&1
leitet sowohl die Standardausgabe als auch die Standardfehler in die Datei dirlist, während der Befehl
ls 2>&1 > dirlist
leitet nur die Standardausgabe zur Datei dirlist um, weil der Standardfehler von der Standardausgabe dupliziert wurde, bevor die Standardausgabe zu dirlist umgeleitet wurde .