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

Wie kann die Ausführungsreihenfolge in der Shell in Bezug auf die Umleitung ungefähr 1 Mal von 1000 auf dem System verärgert werden?

In Anbetracht dieser Fragen und Antworten zur Ausführungsreihenfolge in der Shell in Bezug auf die Umleitung und trotz der Tatsache, dass eine nicht vorhandene Datei zuerst erstellt wird, sodass cat example.txt | shuf > example.txt beschwert sich nicht, dass die Datei nicht existiert – was nach meinem Verständnis nur die Reihenfolge bestätigt – warum funktioniert dann etwa alle tausend Mal auf meinem System der Shuffle, wenn ich dies tue (Backup enthält jeweils 15 statische Werte auf ihre Linie)

for i in $(seq 1 1000); do
    cp backup test
    echo $i
    cat test | shuf > test
    cat test
done

Wie kann es scheinbar eine Ausnahme von der Regel geben?

Akzeptierte Antwort:

Hier:

cat test | shuf > test

> hat Vorrang in dem Sinne, dass dies bedeutet:

(cat test) | (shuf > test) 

und nicht:

(cat test | shuf) > test

Wenn wir jedoch zwei verschiedene Dateien verwenden würden, gäbe es sowieso keinen Unterschied zwischen diesen beiden Gruppierungen.

Was wichtig wird, wenn Sie dieselbe Datei verwenden, ist, dass die beiden Befehle auf beiden Seiten der Pipe gleichzeitig ausgeführt werden . Diese Befehle sind cat test und shuf > test . > bedeutet „zum Schreiben öffnen und abschneiden“, während cat wird „zum Lesen öffnen“, lesen und schließen. Da diese beiden Dinge gleichzeitig passieren , ist die Beziehung zwischen der Reihenfolge ihrer kollektiven Operationen unbestimmt . Es besteht die Möglichkeit, dass cat wird die Datei einschlürfen, bevor die Shell shuf > test verwaltet schneidet es ab. Aber das ist eine geringe Chance, da mehr beteiligt ist; es wird nur passieren, wenn cat hat großes Glück in Bezug auf die Planung von shuf > test .

Moral der Geschichte: Tun Sie dies nicht – verwenden Sie stattdessen zwei Dateien.


Linux
  1. Wie kann ich eine Datei von Awk kategorisieren?

  2. Wie macht man die Aktivitätsleiste der Gnome-Shell immer klein?

  3. So ändern Sie die Standard-Shell in Linux

  4. Holen Sie sich die Programmausführungszeit in der Shell

  5. Wie kann ich die Zeit ändern, bevor das System gesperrt wird?

So beschränken Sie den Zugriff des Benutzers auf das Linux-System

So ändern Sie die Standard-Shell im Linux-System

Finden Sie heraus, wie lange es dauert, Ihr Linux-System zu booten

Überprüfen und finden Sie heraus, wie lange das Booten Ihres Linux-Systems dauert

So verwenden Sie den fd-Befehl auf einem Linux-System

Ausführungszeit des Shell-Skripts in Linux drucken