Katzenumleitung


11

Angenommen, eine aufgerufene Datei abcbefindet sich im aktuellen Verzeichnis und enthält Text. Wenn Sie den Befehl ausführen:

cat abc > abc

Warum abcverschwindet der Inhalt der Datei ?
Warum löscht der Befehl den darin enthaltenen Text und die Datei wird zu einer leeren Datei?



10
Ein Laserpointer ist ein sehr effektives Werkzeug für die Katzenumleitung. </ pun>
WBT

Meine Katze reagiert sehr schlecht auf Umleitung ...
Ex Umbris

Um dieses Problem zu vermeiden, verwende ich ein kleines Shellscript, das ich Hund nannte :cat abc | dog abc
joeytwiddle

Eine andere Option, wenn Sie die Ausgabe auf dem Bildschirm nicht stören, ist die Verwendung tee.
Andrea Lazzarotto

Antworten:


27

Wegen der Reihenfolge, wie die Dinge gemacht werden.

Wenn Sie das tun:

cat abc > abc

>ist der Umleitungsoperator für die Ausgabe. Wenn die Shell dies sieht, öffnet sie die Datei im Kürzungsmodus mit dem O_TRUNCFlag mit open(2)dh open("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 der catBefehl ausgeführt wird.

Wenn der Befehl cat abcausgeführt wird, ist die Datei abcbereits abgeschnitten, sodass catdie Datei leer ist.


1
Was ist mit Katze abc >> abc? Was passiert dann?
Tulsi Kanodia

2
@TulsiKanodia - das verursacht eine Endlosschleife. Jedes Mal, wenn eine Katze eine Zeile liest, wird eine weitere angehängt, bevor zur nächsten übergegangen wird.
user3490

3
Dies wird erkannt und verhindert. Stattdessen wird der Text cat: filename: input file is output file(wo filenameist der von Ihnen gewählte Dateiname) auf dem alten Standard gedruckt.
UTF-8


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.