GNU/Linux >> Tutoriels Linux >  >> Linux

La commande Shuf File> File laisse-t-elle un fichier vide, mais pas les commandes similaires ? ?

Cette question a déjà des réponses ici :Pourquoi `cat`ing un fichier en lui-même l'efface-t-il? [dupliquer]

(2 réponses)
Fermé il y a 2 ans.

Je sais que c'est une sorte de doublon d'une autre question (Pourquoi cette commande de tri me donne un fichier vide ?) Mais je voulais développer la question en réponse aux réponses données.

La commande

shuf example.txt > example.txt

Renvoie un fichier vide, car le shell tronque le fichier avant de le mélanger, ne laissant qu'un fichier vide à mélanger. Cependant,

cat example.txt | shuf > example.txt

produira un fichier mélangé comme prévu.

Pourquoi la méthode du pipeline fonctionne-t-elle alors que la redirection simple ne fonctionne pas ? Si le fichier est tronqué avant l'exécution des commandes, la deuxième méthode ne devrait-elle pas également laisser un fichier vide ?

Réponse acceptée :

Le problème est que > example.txt commence à écrire dans ce fichier, avant shuf example.txt commence à le lire. Donc, comme il n'y avait pas encore de sortie, example.txt est vide, shuf lit un fichier vide, et comme shuf ne fait aucune sortie dans ce cas, le résultat final reste vide.

Votre autre commande peut souffrir du même problème. > example.txt peut tuer le fichier avant cat example.txt commence à le lire ; cela dépend de l'ordre dans lequel le shell exécute ces choses et du temps que cela prend cat pour réellement ouvrir le fichier.

Pour éviter complètement de tels problèmes, vous pouvez utiliser shuf example.txt > example.txt.shuf && mv example.txt.shuf example.txt .

Ou vous pouvez utiliser shuf example.txt --output=example.txt à la place.


Linux
  1. 8 commandes effrayantes qui hantent le terminal

  2. Pourquoi la substitution de processus Bash ne fonctionne-t-elle pas avec certaines commandes ?

  3. La commande "java" n'exécute pas la JVM qui a été installée

  4. Comment la commande stat calcule-t-elle les blocs d'un fichier ?

  5. La commande Linux sed ne modifie pas le fichier cible

La différence entre plus, moins et la plupart des commandes

5 commandes Linux obscures mais utiles pour les administrateurs système

5 commandes pour afficher le contenu d'un fichier en ligne de commande Linux

Commandes Linux et Unix Tee pratiques pour l'administrateur Linux

Core dumpé, mais le fichier core n'est pas dans le répertoire courant ?

Comment enregistrer la sortie de cette commande awk dans un fichier ?