115 votes

Tandis que la boucle pour tester si un fichier existe dans bash

Je travaille sur un script shell qui ne fait certains changements sur un fichier txt que s'il existe, mais cette boucle de test ne fonctionne pas, je me demande pourquoi ? Merci !

while [ ! -f /tmp/list.txt ] ;
do
      sleep 2
done

176voto

CWF Points 439

Quand tu dis "ça ne marche pas", comment sais-tu que ça ne marche pas ?

Vous pouvez essayer de déterminer si le fichier existe réellement en ajoutant :

while [ ! -f /tmp/list.txt ]
do
  sleep 2 # or less like 0.2
done
ls -l /tmp/list.txt

Vous pouvez également vous assurer d'utiliser un shell Bash (ou associé) en tapant « echo $ SHELL ». Je pense que CSH et TCSH utilisent une sémantique légèrement différente pour cette boucle.

61voto

yingted Points 2444

Si vous êtes sous linux et que vous avez installé inotify-tools, vous pouvez le faire :

file=/tmp/list.txt
while [ ! -f "$file" ]
do
    inotifywait -qqt 2 -e create -e moved_to "$(dirname $file)"
done

Cela réduit le retard introduit par le sommeil tout en sondant toutes les "x" secondes. Vous pouvez ajouter d'autres événements si vous prévoyez qu'ils sont nécessaires.

4voto

David Cox Points 41

J'ai eu le même problème, mettre le ! en dehors des parenthèses ;

while ! [ -f /tmp/list.txt ];
do
    echo "#"
    sleep 1
done

De plus, si vous ajoutez un écho à l'intérieur de la boucle, il vous dira si vous entrez ou non dans la boucle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X