Ich habe Datei1, Datei2, Datei3.
Datei1 enthält 1
Datei2 enthält 2
Datei3 enthält 3
Ich benutze Befehl
cat file1 > file2 > file3
Ergebnisse in:
Datei1 1
Datei2 (enthält nichts)
file3 1
Warum wird irgendetwas in dieser Richtung zerstört? Was sehe ich eigentlich nicht hinter den Kulissen?
(Randnotizen mit "Anhängen" >>
sind noch seltsamer)
bash
shell
io-redirection
Keine Zeit
quelle
quelle
Antworten:
Umleitungen in Bourne / POSIX-Shells wie Bash , Dash, Ksh usw.
> x
Öffnet und schneidet die Dateix
und legt den Dateideskriptor fest, in denx
als Standardausgabe geschrieben wird. Ihr Befehl:Wille:
file2
file3
cat file1
Das Endergebnis ist, dass die Standardausgabe
file3
zu der Zeit ausgeführt wirdcat
. Beidefile2
undfile3
haben ihren aktuellen Inhalt gelöscht und erhaltenfile3
die Ausgabe voncat
(den Inhalten vonfile1
) in sie geschrieben.Wenn Sie die Ausgabe in mehrere Streams aufteilen möchten, die in separate Dateien geschrieben wurden, können Sie Folgendes verwenden
tee
:Andere Shells verhalten sich ( insbesondere
zsh
) anders, und Ihr Befehl würde das Ergebnis haben, das Sie wahrscheinlich erwartet haben: beidesfile2
undfile3
den Inhalt vonfile1
.Beachten Sie, dass
cat
dies hier nicht erforderlich ist.<
Die Eingabeumleitung würde den Job genauso gut erledigen.quelle
cat
nicht notwendig sein, einige ist Befehl, der aus der Eingabedatei liest.< inputfile > outputfile
schneidet nur die Ausgabedatei ab, kopiert die Eingabedatei nicht in sie.tee
Kommando.< x > y
funktioniert aber tatsächlich inzsh
.> or <
entgegengesetzt sein, um den Datenfluss aufrechtzuerhalten. Aber ich weiß es wirklich nicht genau und bin zu müde, um nachzudenken.Wenn Sie einen fd mehrmals umleiten, werden alle Umleitungen ausgeführt, und die letzte bleibt bestehen:
Also
file2
wurde geöffnet und abgeschnitten und dannfile3
geöffnet.quelle