Zunächst einmal beachten Sie, dass >log
ist eine kurze Hand für 1>log
. Die N>M
Syntax wird in Zeigerzuweisungen konvertiert. Lassen Sie uns den Zeiger auf Standardausgabe fd1
und den Zeiger auf Standardfehler fd2
aufrufen.Das heißt:
fd1
ist ein Zeiger auf stdout
fd2
ist ein Zeiger auf stderr
Wenn Sie ausführen cmd 2>&1 >log
, ändert es die Zeiger wie folgt aus:
- machen
fd2
zeigen Sie auf, was fd1
zeigt, wasist
fd1
Punkt in einer Datei
- => als Ergebnis
fd2
Punkte zu stdout
und fd1
auf eine Datei machen
Wenn Sie ausführen cmd >log 2>&1
, es ändert sich die Zeiger wie folgt aus:
- make
fd1
zeigen Sie auf eine Datei
- make
fd2
Punkt, was fd1
Punkte, die die Datei
- => als Ergebnis ist sowohl
fd1
und fd2
auf die gleiche Datei
Das heißt, auf der Grundlage der Reihenfolge der Zeiger Neuzuordnungen, wird das Ergebnis anders sein. In einem Fall zeigen beide Zeiger auf dasselbe oder sie zeigen auf verschiedene Dinge.
Statt ls -yz
als Beispiel Befehl cmd
der Verwendung finde ich ein geeignetes Beispiel, dies zu erklären ist ls yes nonexistent
, wo yes
eine Datei ist, die vorhanden ist, und nonexistent
ist eine Datei, die nicht der Fall ist. In diesem Beispiel wird sowohl auf stdout
als auch auf stderr
etwas gedruckt, und wenn Sie mit der Reihenfolge N>M
spielen, können Sie deutlicher sehen, wo beide enden. (Mit ls -yz
, gibt es nur stderr
, während stdout
ist leer.)
Ich würde eine Erklärung zu den Downvote sehr schätzen, als ob meine Antwort nicht die richtige ist, werde ich hier etwas lernen. – Fred
Ich denke OP weiß, dass die Reihenfolge zählt, die Frage ist "warum" es wichtig ist. Beachten Sie, dass die zwei Ordnungen nebeneinander auf der Seite angezeigt werden, die durch OP verbunden ist, so viel ist ziemlich klar. – janos