J'utilise habituellement watch
l'utilitaire linux pour regarder la sortie d'une commande à plusieurs reprises toutes les n secondes, comme dans watch df -h /some_volume/
Mais il semble que je ne puisse pas utiliser watch
avec une série de commandes comme:
$ watch ls -ltr|tail -n 1
Si je fais cela, 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'une des raisons suivantes é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 faites 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 de $()
est exécutée une seule fois et la chaîne de sortie résultante est toujours imprimée ("surveillée") comme un littéral.
Alors, comment puis-je faire fonctionner la commande watch
avec une chaîne de commandes [autre que de les placer dans un script]?
watch 'command | othertool | yet-another-tool'
watch -n 1 "ls -lrt | tail -n20; date"
vous permet de diriger et de courir dans une rangée.
Si vous souhaitez également répertorier tous les fichiers dans les sous-répertoires, vous pouvez utiliser la commande find avec l'option exec.
watch
sera mis à jour toutes les 30 secondes et find
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:
watch -n30 'find . -name "*.log" -print -exec tail -n10 {} \; '
utilisez une combinaison de '& " exemple:
watch -n 1 "links -dump 127.0.0.1/server-status | grep -e '\S' -Fe 'www.'"