Angenommen, eine aufgerufene Datei abc
befindet sich im aktuellen Verzeichnis und enthält Text. Wenn Sie den Befehl ausführen:
cat abc > abc
Warum abc
verschwindet der Inhalt der Datei ?
Warum löscht der Befehl den darin enthaltenen Text und die Datei wird zu einer leeren Datei?
files
io-redirection
cat
Tulsi Kanodia
quelle
quelle
cut
eine Datei an Ort und Stelle ändern?cat abc | dog abc
tee
.Antworten:
Wegen der Reihenfolge, wie die Dinge gemacht werden.
Wenn Sie das tun:
>
ist der Umleitungsoperator für die Ausgabe. Wenn die Shell dies sieht, öffnet sie die Datei im Kürzungsmodus mit demO_TRUNC
Flag mitopen(2)
dhopen("abc", O_TRUNC)
, sodass alles, was in der Datei vorhanden war, nicht mehr vorhanden ist. Beachten Sie, dass diese Umleitung zuerst von der Shell durchgeführt wird, bevor dercat
Befehl ausgeführt wird.Wenn der Befehl
cat abc
ausgeführt wird, ist die Dateiabc
bereits abgeschnitten, sodasscat
die Datei leer ist.quelle
cat: filename: input file is output file
(wofilename
ist der von Ihnen gewählte Dateiname) auf dem alten Standard gedruckt.Wenn Sie der Antwort von @ heemayl hinzufügen möchten, dass der Code klarer über die Reihenfolge ist, in der die Dinge geschehen, können Sie einfach die Umleitungen am Anfang des Befehls einfügen:
quelle