J'utilise habituellement l' watch
utilitaire linux pour regarder la sortie d'une commande plusieurs fois toutes les n secondes, comme danswatch df -h /some_volume/
Mais il semble que je ne sois pas capable d’utiliser watch
une série de commandes comme:
$ watch ls -ltr|tail -n 1
Si je le fais, watch
regarde vraiment ls -ltr
et la sortie est passée à tail -n 1
qui ne sort rien.
Si j'essaye ceci:
$ watch (ls -ltr|tail -n 1)
Je reçois
$ watch: syntax error near unexpected token `ls'
Et l’un des problèmes suivants échoue pour une raison ou une autre:
$ watch <(ls -ltr|tail -n 1)
$ watch < <(ls -ltr|tail -n 1)
$ watch $(ls -ltr|tail -n 1)
$ watch `ls -ltr|tail -n 1)`
Et enfin si fais ceci:
$ watch echo $(ls -ltr|tail -n 1)
Je ne vois aucun changement dans la sortie à l'intervalle donné, car la commande à l'intérieur $()
est exécutée une seule fois et la chaîne de sortie résultante est toujours imprimée ("surveillée") en tant que littéral.
Alors, comment puis-je faire en sorte que la watch
commande fonctionne avec une chaîne de commandes canalisée [autre que de les insérer dans un script]?
man watch
et faire défiler vers le bas pour des exemples ...Réponses:
la source
watch sh -c 'command | etc'
notamment en ce qui concerne les approches testées dans la question.laissez-vous pipe et courir dans une rangée.
la source
-n 1
?Si vous souhaitez également répertorier tous les fichiers dans des sous-répertoires, vous pouvez utiliser la commande find avec l'option exec.
watch
se mettra à jour toutes les 30 secondes etfind
recherchera tous les fichiers * .log dans le répertoire courant (sous-répertoires inclus) et imprimera les noms de fichiers et leurs 10 dernières lignes:la source