web-dev-qa-db-fra.com

Comment utiliser la commande watch avec une chaîne de commandes / programmes

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]?

60
Tulains Córdova
watch 'command | othertool | yet-another-tool'
107
DopeGhoti
watch -n 1 "ls -lrt | tail -n20; date"

vous permet de diriger et de courir dans une rangée.

12
Soft Dot IE

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 {} \; '
2
yoyomanYo

utilisez une combinaison de '& " exemple:

watch -n 1 "links -dump 127.0.0.1/server-status | grep -e '\S' -Fe 'www.'"
0
Dimitar Velev