GNU/Linux >> Tutoriels Linux >  >> Linux

Comment l'ordre d'exécution dans le shell en ce qui concerne la redirection peut-il être bouleversé environ 1 fois sur 1000 sur le système ?

Considérant ce Q&A sur l'ordre d'exécution dans le shell en ce qui concerne la redirection, et malgré le fait que si un fichier n'existe pas, il est créé en premier afin que cat example.txt | shuf > example.txt ne se plaint pas que le fichier n'existe pas - ce qui confirme simplement l'ordre d'après ce que je comprends - alors pourquoi est-ce qu'environ une fois tous les mille fois sur mon système, le shuffle fonctionne lorsque je fais cela (la sauvegarde contient 15 valeurs statiques chacune sur leur ligne)

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

Comment peut-il apparemment y avoir une exception à la règle ?

Réponse acceptée :

Ici :

cat test | shuf > test

> a priorité dans le sens où cela signifie :

(cat test) | (shuf > test) 

et non :

(cat test | shuf) > test

Bien que si nous utilisions deux fichiers différents, il n'y aurait de toute façon aucune différence entre ces deux groupes.

Ce qui devient important lorsque vous utilisez le même fichier, c'est que les deux commandes de chaque côté du tuyau s'exécutent simultanément . Ces commandes sont cat test et shuf > test . > signifie "ouvert pour l'écriture et tronqué", alors que cat va "ouvrir pour la lecture", lire et fermer. Étant donné que ces deux choses se produisent simultanément , la relation entre l'ordre de leurs opérations collectives est indéterminée . Il y a une chance que cat obtiendra de saisir le fichier avant que le shell ne gère shuf > test le tronque. Mais c'est une mince chance, car il y a plus impliqué; cela n'arrivera que si cat est très chanceux en ce qui concerne la programmation de shuf > test .

Morale de l'histoire : Ne faites pas cela - utilisez plutôt deux fichiers.


Linux
  1. Comment changer l'identité d'un système Linux

  2. Comment Cater un fichier depuis Awk ?

  3. Comment rendre la barre d'activités Gnome Shell petite tout le temps ?

  4. Comment changer le shell par défaut sous Linux

  5. Comment rediriger la sortie de system() vers un fichier ?

Comment limiter l'accès de l'utilisateur au système Linux

Comment changer le shell par défaut dans le système Linux

Découvrez combien de temps faut-il pour démarrer votre système Linux

Vérifiez et découvrez combien de temps il faut pour démarrer votre système Linux

Comment utiliser la commande fd sur le système Linux

Imprimer le temps d'exécution du script Shell sous Linux