Ich verstehe nicht ganz, wie der Computer diesen Befehl liest.
cat file1 file2 1> file.txt 2>&1
Wenn ich das verstehe, 2>&1
leiten Sie Standardfehler einfach zur Standardausgabe um.
Nach dieser Logik lautet der Befehl für mich wie folgt:
Dateien verketten
file1
undfile2
.senden
stdout
von dieser Operation anfile.txt
.senden
stderr
anstdout
.Ende?
Ich bin nicht sicher, was der Computer macht. Nach meiner Logik sollte der Befehl lauten
cat file1 file2 2>&1 > file.txt
aber das ist nicht richtig.
quelle
$
?var=$othervar
,$
stellt den Namen der Variablen auf der rechten Seite. In einer Umleitung wie2>&1
,&
stellt die Dateideskriptor Nummer auf der rechten Seite. Ich sage, Sie können sich vorstellen, dass "Datei 2 gleich Datei 1" ist. (Es gibt jedoch zwei Arten von Gleichheit:<
bedeutet "zum Lesen" und>
bedeutet "zum Schreiben".)Die Reihenfolge der Umleitung ist wichtig und sollte von links nach rechts gelesen werden .
Zum Beispiel:
command 2>&1 >somefile
bedeutet:stderr
(nämlich2
) zum aktuellen Zielstdout
(an diesem Punkt zum Terminal) um.stdout
Sie zusomefile
.In diesem Fall wird
stderr
zum Terminal undstdout
zu einer Datei gewechselt, was Sie wahrscheinlich nicht wollen.Auf der anderen Seite
command >somefile 2>&1
bedeutet:stdout
ansomefile
stderr
an dasselbe Ziel wiestdout
(somefile
).In diesem letzten Fall beides
stderr
undstdout
lossomefile
, das ist wohl was du willst.quelle
>&
Eigentlich bedeutet duplizieren, verwendet es den Systemaufruf dup, um einen neuen Dateideskriptor auf eine bereits geöffnete Datei abzubilden.Sie müssen also (tatsächlich) zuerst die neue Standardausgabe öffnen, bevor Sie sagen "und stderr zu der aktuell eingestellten Standardausgabe umleiten".
quelle
&
. Könnten Sie einige Verweise auf diese Syntax oder - noch besser - einige gute Ressourcen zum oben genannten dup-System beifügen?