Ich habe einen Befehl: mywritercmd -f /tmp/test 2>&1 > log.txt
Ich 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.txt
wurde 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>&1
führt zum gewünschten Verhalten und bewirkt, dass die Fehlermeldung in die Datei log.txt geschrieben wird.