Warum erscheint in stderr nicht die Meldung „Zugriff verweigert“?

Warum erscheint in stderr nicht die Meldung „Zugriff verweigert“?

Ich habe einen Befehl: mywritercmd -f /tmp/test 2>&1 > log.txtIch führe ihn in einem Bash-Terminal aus, der Befehl gibt zurückerror: could not open output file "/tmp/test": Permission denied

Diese Fehlermeldung erscheint jedoch nicht imDatei:log.txtDatei, sie bleibt leer...

Warum?

Ich hätte gedacht, dass diese Nachricht an stderr und dann in die Datei gehen sollte, aber irgendwie ist das nicht der Fall.

Antwort1

Der Unterschied liegt in der Reihenfolge. Die Befehlszeile wird von links nach rechts ausgewertet. Wenn sie erreicht ist 2>&1, lautet die Anweisung, stderr dorthin zu liefern, wo stdout hingeht. Zu diesem Zeitpunkt > log.txtwurde der Teil noch nicht ausgewertet. Daher bleibt stderr auf der Standardeinstellung, d. h., es wird an das Terminal ausgegeben.

mywritercmd -f /tmp/test > log.txt 2>&1führt zum gewünschten Verhalten und bewirkt, dass die Fehlermeldung in die Datei log.txt geschrieben wird.

verwandte Informationen