GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Hinterlässt der Befehl Shuf File> File eine leere Datei, aber ähnliche Befehle nicht?

Für diese Frage gibt es hier bereits Antworten :Warum löscht das Verketten einer Datei in sich selbst diese? [Duplikat]

(2 Antworten)
Vor 2 Jahren geschlossen.

Ich weiß, dass dies eine Art Duplikat einer anderen Frage ist (Warum gibt mir dieser Sortierbefehl eine leere Datei?), aber ich wollte die Frage als Antwort auf die gegebenen Antworten erweitern.

Der Befehl

shuf example.txt > example.txt

Gibt eine leere Datei zurück, da die Shell die Datei vor dem Mischen abschneidet und nur eine leere Datei zum Mischen übrig lässt. Allerdings

cat example.txt | shuf > example.txt

erzeugt wie erwartet eine gemischte Datei.

Warum funktioniert die Pipeline-Methode, wenn die einfache Umleitung nicht funktioniert? Wenn die Datei abgeschnitten wird, bevor die Befehle ausgeführt werden, sollte die zweite Methode nicht auch eine leere Datei hinterlassen?

Akzeptierte Antwort:

Das Problem ist, dass > example.txt beginnt mit dem Schreiben in diese Datei, bevor shuf example.txt beginnt es zu lesen. Da es noch keine Ausgabe gab, example.txt leer ist, shuf liest eine leere Datei und als shuf macht in diesem Fall keine Ausgabe, das Endergebnis bleibt leer.

Ihr anderer Befehl kann unter demselben Problem leiden. > example.txt kann die Datei vor cat example.txt beenden beginnt es zu lesen; es hängt von der Reihenfolge ab, in der die Shell diese Dinge ausführt, und wie lange es dauert cat um die Datei tatsächlich zu öffnen.

Um solche Probleme vollständig zu vermeiden, könnten Sie shuf example.txt > example.txt.shuf && mv example.txt.shuf example.txt verwenden .

Oder Sie könnten mit shuf example.txt --output=example.txt gehen stattdessen.


Linux
  1. Das Shuf-Befehls-Tutorial mit Beispielen für Anfänger

  2. Warum funktioniert der reguläre Ausdruck in X, aber nicht in Y?

  3. Der Befehl „java“ führt die installierte JVM nicht aus

  4. Datei:Befehl nicht gefunden

  5. Core-Dump, aber Core-Datei befindet sich nicht im aktuellen Verzeichnis?

Der Unterschied zwischen mehr, weniger und den meisten Befehlen

5 obskure, aber nützliche Linux-Befehle für Systemadministratoren

5 Befehle zum Anzeigen des Inhalts einer Datei in der Linux-Befehlszeile

Praktische Linux- und Unix-Tee-Befehle für den Linux-Administrator

Wie berechnet der Befehl stat die Blöcke einer Datei?

Der Linux-Befehl sed ändert die Zieldatei nicht