Come usare il comando watch con una catena di comandi / programmi


52

Di solito utilizzo l' watchutility linux per guardare l'output di un comando ripetutamente ogni n secondi, come inwatch df -h /some_volume/

Ma non riesco a usarlo watchcon una serie di comandi convogliati come:

$ watch ls -ltr|tail -n 1

Se lo faccio, watchsta davvero guardando ls -ltre viene trasmesso l'output a tail -n 1cui non viene emesso nulla.

Se provo questo:

$ watch (ls -ltr|tail -n 1)

ottengo

$ watch: syntax error near unexpected token `ls'

E una delle seguenti ragioni fallisce in qualche modo:

$ watch <(ls -ltr|tail -n 1)

$ watch < <(ls -ltr|tail -n 1)

$ watch $(ls -ltr|tail -n 1)

$ watch `ls -ltr|tail -n 1)`

E infine se lo fai:

$ watch echo $(ls -ltr|tail -n 1)

Non vedo alcun cambiamento nell'output all'intervallo dato perché il comando all'interno $()viene eseguito solo una volta e la stringa di output risultante viene sempre stampata ("guardata") come un valore letterale.

Quindi, come faccio a far funzionare il watchcomando con una catena di comandi convogliata [altro che inserirli in uno script]?


corri man watche scorri verso il basso fino agli esempi ...
don_crissti

Risposte:


83
watch 'command | othertool | yet-another-tool'

1
Vale la pena notare l'approccio generico e in watch sh -c 'command | etc'particolare gli approcci provati nella domanda.
sourcejedi,

@sourcejedi Non ho davvero capito perché, ma questo non produrrà sempre gli stessi risultati.
Michael Mior,

12
watch -n 1 "ls -lrt | tail -n20; date"

facciamo pipa ed eseguiamo di fila.


a cosa serve -n 1?
Nam G VU

2
@NamGVU: esegui il comando ogni 1 secondo
Duc Tran

2

Se desideri elencare anche tutti i file nelle sottodirectory, puoi usare il comando find con l'opzione exec.

watchsi aggiornerà ogni 30 secondi e findcercherà tutti i file * .log nella directory corrente (sottodirpi inclusi) e stamperà i nomi dei file e le loro ultime 10 righe:

watch -n30 'find . -name "*.log" -print -exec tail -n10 {} \; '
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.