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 .