GNU/Linux >> Znalost Linux >  >> Linux

Jak na to, aby se pořadí provádění v prostředí, pokud jde o přesměrování, rozčilovalo asi 1 čas z 1000 v systému?

Vezmeme-li v úvahu tyto otázky a odpovědi o pořadí provádění v prostředí, které se týká přesměrování, a navzdory skutečnosti, že pokud soubor neexistuje, vytvoří se jako první, takže cat example.txt | shuf > example.txt nestěžuje si, že soubor neexistuje – což jen potvrzuje objednávku z toho, čemu rozumím – proč tedy asi jednou za tisíckrát v mém systému funguje náhodné přehrávání, když to udělám (záloha obsahuje 15 statických hodnot na jejich řádek)

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

Jak může zdánlivě existovat výjimka z pravidla?

Přijatá odpověď:

Zde:

cat test | shuf > test

> má přednost v tom smyslu, že to znamená:

(cat test) | (shuf > test) 

a ne:

(cat test | shuf) > test

I když kdybychom použili dva různé soubory, stejně by mezi těmito dvěma seskupeními nebyl žádný rozdíl.

Při použití stejného souboru je důležité, že se dva příkazy na obou stranách roury provádějí souběžně . Tyto příkazy jsou cat test a shuf > test . > znamená „otevřeno pro zápis a zkrácení“, zatímco cat se „otevře pro čtení“, přečte a zavře. Protože se tyto dvě věci dějí současně , vztah mezi pořadím jejich kolektivních operací je neurčitý . Existuje šance, že cat dostane se k uskupení souboru, než shell spravující shuf > test zkrátí to. Ale to je mizivá šance, protože jde o víc; stane se to pouze pokud cat má velké štěstí ve vztahu k plánování shuf > test .

Morálka příběhu: Nedělejte to – použijte místo toho dva soubory.


Linux
  1. Získejte čas provádění programu v shellu

  2. Jak přesměrovat výstup system() do souboru?

  3. Jak mohu změnit čas, než se systém zamkne?

  1. Linux – Jak zjistit, jaké pevné disky jsou v systému?

  2. Jak zachytit stav návratu a zároveň použít čaj v Korn Shell?

  3. Jak zjistit podrobnosti o hardwaru na počítači se systémem Linux?

  1. Jak vykopat soubor z Awk?

  2. Jak zajistit, aby byl panel aktivit Gnome Shell neustále malý?

  3. Jak změnit výchozí prostředí v Linuxu