Antworten:
Wenn Sie ein C-Programmierer sind, können Sie sich &1"die Adresse von 1" 2>&1vorstellen, also "leiten Sie den Dateideskriptor Nr. 2 an die gleiche Stelle wie Nr. 1 um".
"Zwei zu und eins" ("zu" sein >) ist für mich logischer als "Zwei und eins", womit ich es normalerweise verwechseln könnte. Wenn Sie "und eins" als ein einzelnes Substantiv (einen Ort) betrachten, ist dies auch im Kontext grammatikalisch sinnvoll, was mit "Zwei und eins" schwerer zu tun ist - Sie müssten "zu eins" als ein einzelnes Substantiv betrachten Nomen, und es würde immer noch keinen Sinn ergeben.
Kein Mnemon, aber ich lese es wie folgt:
0ist stdin.
1ist stdout.
2ist stderr.
>ist in.
<ist aus.
&ist ein Dateideskriptor (in einigen Shells).
2>&1
2 > & 1
stderr into file descriptor 1
redirect stderr into stdout
Es kann sich ändern, wenn Sie vor der Umleitung mit einem der Dateideskriptoren in Unordnung geraten sind ...
2>somefile 1>&2
2 > somefile 1 > &2
stderr into somefile and stdout into file descriptor 2
redirect stderr into somefile and stdout into somefile.
Wenn Sie schreiben 2>&1, sagen Sie "Standardfehler wird an Standardausgabe ausgegeben".
Lassen Sie uns das zusammenfassen.
Zuerst möchten Sie sich merken, dass Standardfehler 2und Standardausgabe sind 1.
Also hast du 2was was 1.
"Geht zu" wird geschrieben >.
Du hast also 2>etwas 1.
2>filenamebedeutet Standardfehler senden an filename. Sie möchten es jedoch nicht an eine Datei mit dem Namen senden 1. Sie möchten etwas anderes: die Nummer einer Datei, die bereits geöffnet ist. Dafür ist der da &.
Also 2>&1.
Sie können sich das auch so vorstellen, als ob Sie eine Aufgabe erledigt hätten, bei der >das wie ein Gleichgestellter und das wie ein Gleichgestellter &ist $. Vergleichen Sie:
f=$1
2>&1
Um eine Befehlszeile mit mehreren Umleitungen zu verstehen, ist es wichtig zu wissen, dass die Umleitungen von links nach rechts erfolgen. Weitere Informationen hierzu finden Sie unter Reihenfolge der Weiterleitungen .
Ich erinnerte mich, dass es immer 2 -> 1. Stderr zu stdout ist.
Der mittlere Teil ist immer der harte und ich habe es immer vermasselt, bis ich mich daran erinnerte, dass zuerst der scharfe Charakter kommt >, dann der Charakter, den ich im wirklichen Leben nicht schreiben kann &.
Also niemals 2&>1, immer2>&1
Wenn Sie verstehen, dass FD2 STDERR ist, denken Sie vielleicht: "Oh, und erfassen Sie STDERR, wohin auch immer ich STDOUT (FD1) sende".
Meine Mitarbeiter und ich sage in der Regel „zwei größer als eins“, weil die meisten von uns nicht immer daran denken , dass stderrDateideskriptor ist 2und stdoutist 1(vor allem diejenigen , die mit Unix / Linux), so dass die anderen Mnemotechnik über Umleiten stderrnicht wirklich Arbeit . Das einzige Problem ist, dass Sie sich immer noch daran erinnern müssen, wohin das kaufmännische Und geht!