Linux cat Beispiel

1432
studiohack

Können Sie mir bitte erklären, warum: 'cat <file.txt> file.txt' file.txt leer macht?

3
Zum Schluss noch zwei Antworten hinzufügen: Wenn Sie eine Schleife machen möchten (endlos füllende Datei), könnten Sie `cat eingeben > file.txt` als zwei >> bedeutet das Anhängen an, anstatt die Datei zu löschen. GregC vor 14 Jahren 0
Yikes Das ist nur gruselig. Ich habe nie daran gedacht, (missbrauchen?) Katzen und Pfeifen wie diese zu benutzen! Deshalb haben wir den "Touch" -Befehl. ;-) Macht aber ein cooles Beispiel. Brian Knoblauch vor 14 Jahren 0

2 Antworten auf die Frage

16
Michael Krelin - hacker

Da die Datei vor dem Lesen der Datei geöffnet und abgeschnitten wird (Shell), werden die Umleitungen bereits vor dem Start von der Shell verarbeitet cat.

13
Gregory Pakosz

Die >Umleitung erfolgt zuerst und wird file.txtzum Schreiben geöffnet, wodurch der vorhandene Inhalt gelöscht wird.

Diese Antwort ist etwas irreführend - @Hacker ist genauer. Auf meinen Systemen werden die Weiterleitungen in der Reihenfolge der Spezifikation verarbeitet. Das heißt, "<" passiert zuerst und dann ">", aber letztere öffnet sich nicht nur zum Schreiben, sondern mit * mit der Kürzung * (`O_TRUNC '), was" den vorhandenen Inhalt löscht ". @Hacker hat recht, das passiert, bevor `cat (1)` sogar ausgeführt wird. pilcrow vor 14 Jahren 0