2011-09-23 2 views
2

J'essaye d'écrire un script pour suivre la progression du changement de fichier.Script shell UNIX en boucle

Je donne les résultats suivants jusqu'à présent:

#!/bin/sh 
old=‘ls -l /tmp/file‘ 
new=‘ls -l /tmp/file‘ 
while [ "$old" = "$new" ] 
do 
    new=‘ls -l /tmp/file‘ 
done 
echo "The file has been changed" 

Le programme ci-dessus lors de son exécution donne le message:

new: command not found 

Quelqu'un peut-il aider s'il vous plaît.

Merci

+0

Vous auriez probablement envie ' "$ vieux" eq "$ nouvelle"' –

+0

@Marc, non, dans le shell '' = est la comparaison de chaînes et '-eq' est comparaison numérique. –

+0

@Mike, vous pourriez vouloir jeter un «sommeil 5» dans votre boucle while. –

Répondre

1

Vous avez probablement espace autour =.

En shell, lorsque vous attribuez les valeurs que vous ne pouvez pas l'espace mis autour =:

MY_VAR = "my value" # this is wrong! 

Shell pensera: "MY_VAR d'appel avec des arguments: ('=', 'ma valeur')", mais attendez ! Je ne connais pas la commande "MY_VAR"!

Vous devez le faire de cette façon:

MY_VAR="my value" # this is OK! 

BTW, utilisez la commande inotifywatch. Voici par exemple:

inotifywatch -v -e access -e modify -t 60 -r /file/to/watch 
Questions connexes