Ne watch
contrôle que la sortie visible d'une commande? Disons que je suis dans un répertoire avec le contenu suivant:
$ ls
a b c d e f g h i j k l m n
Si je cours, watch -g ls -1
je m'attends à ce qu'il se termine si un fichier est ajouté ou supprimé. Ce qui se passe réellement, c'est qu'il ne se ferme que si le fichier en question est visible dans la sortie du terminal de watch
:
$ watch -g ls -1
Every 2.0s: ls -1 Wed Nov 13 16:35:03 2013
a
b
c
d
e
f
La suppression du fichier m
, qui n'est pas visible à cause de la taille de mon terminal, ne fait rien. Suppression d'un fichier visible, par exemple d
, provoque la fermeture watch
comme prévu.
Le -g
drapeau s'explique ainsi dans ma man
page:
-g, --chgexit
Exit when the output of command changes.
Que se passe-t-il? Est-ce normal? Comment puis-je utiliser watch
pour des commandes avec une sortie longue? J'utilise watch from procps-ng 3.3.4
ce qui a été installé à partir des dépôts Debian.
-g
optionwatch
? Je ne le trouve pas dans ma version dewatch
Réponses:
J'ai trouvé ce fil intitulé: Bug # 225549: avoir un moniteur de surveillance stderr . Ce fil date de 2008, mais il semble que les anciennes versions ne prennent pas en charge la surveillance de quoi que ce soit d'autre que STDOUT.
Nous sommes donc limités à STDOUT. En ce qui concerne le visible, il y a beaucoup de langage dans le
info watch
etman watch
cela me fait penser que votre observation / hypothèse est correcte.extrait
Aussi ce bit sous BUGS:
Si je devais deviner, je penserais qu'ils stockaient les bits visibles dans un tampon entre les exécutions, puis analysaient uniquement ces caractères.
EDIT # 1
J'ai débogué cela plus en utilisant
strace
et vous pouvez voir lawatch
lecture de la sortie de lals
commande afin de supprimer en interne le changement.avant de supprimer le
m
fichieraprès la
m
suppression du fichierla source
watch -g foo; echo "Something changed!"
. Cela semble un bug étrangement invalidant dans un programme aussi établi.-g
commutateur mais je l'ai essayé sur Ubuntu et il se comporte de la même manière.Je suis presque sûr que vous recherchez les outils inotify .
Ma page de manuel pour la montre , de procps-ng , dit
la source
watch
à se comporter comme l'OP et à sortir avec le changement.watch
se comporte ainsi. Il connaît l'inotification.