Wenn Sie sowohl stdout als auch stderr in dieselbe Datei umleiten möchten, können Sie dies mit command 1>file.txt 2>&1
, oder tun command &>file.txt
. Aber warum unterscheidet sich das Verhalten command 1>file.txt 2>file.txt
von den beiden oben genannten Befehlen?
Das Folgende ist ein Verifizierungsbefehl.
$ cat redirect.sh
#!/bin/bash
{ echo -e "output\noutput" && echo -e "error" 1>&2; } 1>file.txt 2>&1
{ echo -e "output\noutput" && echo -e "error" 1>&2; } 1>file1.txt 2>file1.txt
{ echo -e "error" 1>&2 && echo -e "output\noutput"; } 1>file2.txt 2>file2.txt
{ echo -e "output" && echo -e "error\nerror" 1>&2; } 1>file3.txt 2>file3.txt
{ echo -e "error\nerror" 1>&2 && echo -e "output"; } 1>file4.txt 2>file4.txt
$ ./redirect.sh
$ echo "---file.txt---"; cat file.txt;\
echo "---file1.txt---"; cat file1.txt; \
echo "---file2.txt---"; cat file2.txt; \
echo "---file3.txt---"; cat file3.txt; \
echo "---file4.txt----"; cat file4.txt;
---file.txt---
output
output
error
---file1.txt---
error
output
---file2.txt---
output
output
---file3.txt---
error
error
---file4.txt----
output
rror
Soweit die Ergebnisse ersichtlich sind, scheint die zweite Echozeichenfolge die erste Echozeichenfolge zu überschreiben, wenn Sie ausgeführt werden command 1>file.txt 2>file.txt
, aber ich weiß nicht, warum dies der Fall ist. (Gibt es irgendwo einen Hinweis?)
quelle
Mit
>
wird die Datei überschrieben. Da stdout und stderr in zwei verschiedenen Vorgängen in die Datei schreiben, überschreibt der letzte zu schreibende Vorgang den ersten.Du kannst tun:
command 1>>file.txt 2>>file.txt
oder
command &>file.txt
Nur bash v4 und höher.>>
weist es an, die Datei anzuhängen, damit die Ausgabe der vorherigen Operationen nicht ersetzt wird.&>
ist nur eine einfachere Art zu schreiben2>&1
quelle
ls 1>&0
undls 0>&0
immer noch?>>
funktioniert. Warum hat dies nicht das Problem zweier Dateibeschreibungen mit unabhängigen Offsets? @JdeBP, weißt du? Ich dachte, dass das Öffnen einer Datei im Anhänge-Modus gleichbedeutend mit dem Öffnen im Schreib-Modus ist, bei dem nach der endgültigen Position gesucht und dann das weitere Suchen untersagt wird.O_APPEND
.