it-swarm.com.de

Warum schneidet die Umleitung in dieselbe Datei die Datei ab?

Normalerweise verwenden wir eine andere Datei, um die Ausgabe umzuleiten.

Zum Beispiel :

cat < first > temp

In diesem Befehl wird der Inhalt von first anstelle der Standardausgabe nach temp umgeleitet.

Warum wird die Datei dann abgeschnitten, wenn ich denselben Dateinamen verwende?

Warum kann dieselbe Datei nicht überschrieben werden?

cat < first > first 
11
Searock

Wenn Sie eine solche E/A-Umleitung verwenden, werden sowohl die "Eingabe" - als auch die "Ausgabe" -Datei von der Shell geöffnet bevor der Befehl ausgeführt wird. Das Öffnen einer Datei zum Überschreiben entspricht dem Abschneiden vor dem Schreiben. Das Ergebnis: cat sieht eine leere Datei bei der Eingabe ...

19
JanC

Weil die Handhabung im allgemeinen Fall sehr kompliziert wäre. Betrachten Sie einfach das folgende Beispiel:

Ein Programm liest eine Datei zeilenweise und gibt jede Zeile zweimal aus. Damit dies nun ohne eine zweite Datei (dh auf derselben Datei) funktioniert, müsste das Programm die meisten (alle) Zeilen, die es lesen wird, puffern, da sie ansonsten überschrieben werden, bevor sie gelesen werden können.

Um die Dinge einfach zu halten, verwenden Programme normalerweise eine sekundäre, temporäre Datei, die sie über das Original verschieben, sobald sie fertig sind. Dies ist zum Beispiel, wie sed -i (Inline) funktioniert.

0
Grey Panther

Normalerweise sollte die Syntax für die Umleitung in diesem Fall cat first > temp Sein. Dies bedeutet, dass die Ausgabe von cat von first an die Datei von temp gesendet wird. Bei Ihrer Anweisung cat < first > temp War die Ausgabe cat zum Zeitpunkt der erneuten Umleitung nach out noch nicht abgeschlossen. Nichts in ergibt nichts aus.

Das cat Erstellen einer Datei und das Umleiten der Ausgabe in eine andere Datei unterscheidet sich jedoch nicht von einem einfachen cp.

0
Casey Keller