Gibt es einen Unterschied zwischen diesen beiden Zeilen?
/home/user/script.sh >> /home/user/stdout_and_error.log 2>&1
/home/user/script.sh 2>&1 >> /home/user/stdout_and_error.log
zu wissen, dass ich die Standard- und Ausführungsfehler des Skripts in die Protokolldatei einfügen möchte. Wenn es keine Unterschiede gibt, was ist, wenn ich die Protokollierung selbst protokollieren möchte?
shell
io-redirection
stdin
stderr
4m1nh4j1
quelle
quelle
Antworten:
Ja, da gibt es einen Unterschied.
Dadurch werden sowohl STDOUT als auch STDERR an gesendet
/home/user/stdout_and_error.log
.Dadurch wird STDOUT an
/home/user/stdout_and_error.log
und STDERR an STDOUT gesendet.Wenn Sie eine Shell-Umleitung durchführen, wird die linke Seite der Umleitung an die Stelle weitergeleitet, an der sich die rechte Seite der Umleitung gerade befindet. Das heißt
2>&1
, es sendet STDERR (2) an den Ort, an den STDOUT (1) gerade geht.Wenn Sie STDOUT jedoch später an eine andere Stelle umleiten, passt STDERR nicht dazu. Es geht weiter, wohin STDOUT zuvor ging. Aus diesem Grund werden in Ihrem ersten Beispiel sowohl STDOUT als auch STDERR an denselben Ort verschoben, im zweiten jedoch nicht.
quelle
In der ersten Befehlszeile sieht die Shell zuerst >> Datei und hängt stdout an Datei an. Die nächsten 2> & 1 senden fd2 (stderr) an denselben Ort, an den fd1 geht - das ist in die Datei. Und genau das willst du.
In der zweiten Befehlszeile sieht die Shell zuerst 2> & 1. Das bedeutet, dass "der Standardfehler (Dateideskriptor 2) an dieselbe Stelle verschoben wird wie die Standardausgabe (fd1)". Es gibt keine Auswirkung, da sowohl fd2 als auch fd1 bereits zum Terminal gehen. Dann >> Datei hängt fd1 (stdout) an die Datei an. Aber fd2 (stderr) geht immer noch zum Terminal.
quelle
>>
Anhängen von stdout (Stream Nr. 1) an eine Datei.2>&1
Kombinieren von stderr (Stream # 2) mit stdout (Stream # 1) (Fügt stderr zu stdout hinzu)>
Schreibt stdout (Stream Nr. 1) in eine Datei und überschreibt die Datei.1>
Schreibt stdout (Stream Nr. 1) in eine Datei und überschreibt die Datei. Das gleiche wie oben.2>
Schreibt stderr (Stream # 2) in eine Datei und überschreibt die Datei.+++
Ihr erstes Beispiel wäre, stdout an eine Datei anzuhängen und dann stderr zu stdout hinzuzufügen.
Ihr zweites Beispiel würde stderr zu stdout hinzufügen und dann das kombinierte stdout (einschließlich stderr) an eine Datei anhängen .
quelle
stderr
to-Datei nicht,stderr
ging zufile descrpitor 1
.