Warum schneidet die Umleitung in dieselbe Datei die Datei ab?

11

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 auf temp umgeleitet.

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

Warum kann es nicht dieselbe Datei überschreiben?

cat < first > first 
Searock
quelle

Antworten:

19

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: catsieht eine leere Datei bei der Eingabe ...

JanC
quelle
0

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 ohne eine zweite Datei (dh in 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 Sache einfach zu halten, verwenden einfache Programme normalerweise eine sekundäre, temporäre Datei, die sie nach Abschluss über das Original verschieben. So funktioniert zum Beispiel sed -i(Inline).

Grauer Panther
quelle
0

In der Regel sollte in diesem Fall die Syntax für die Umleitung lauten cat first > temp. Dies bedeutet, dass catdie Ausgabe von firstan die Datei von gesendet wird temp. Im Fall Ihrer Anweisung cat < first > tempwurde die Ausgabe catzum Zeitpunkt der erneuten Umleitung nicht abgeschlossen. Nichts führt zu nichts.

Eine catDatei und die Ausgabe, die in eine andere Datei umgeleitet wird, unterscheiden sich jedoch nicht von einer Basisdatei cp.

Casey Keller
quelle
cat < first > tempfunktioniert gut.
janc