Cómo usar el comando watch con una cadena de comandos / programas canalizados


52

Usualmente watchutilizo la utilidad Linux para ver la salida de un comando repetidamente cada n segundos, como enwatch df -h /some_volume/

Pero parece que no puedo usar watchuna serie de comandos canalizados como:

$ watch ls -ltr|tail -n 1

Si hago eso, watchrealmente está mirando ls -ltry la salida se está pasando a la tail -n 1que no sale nada.

Si intento esto:

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

yo obtengo

$ watch: syntax error near unexpected token `ls'

Y cualquiera de los siguientes falla alguna razón u otra:

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

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

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

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

Y finalmente si haces esto:

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

No veo ningún cambio en la salida en el intervalo dado porque el comando dentro $()se ejecuta solo una vez y la cadena de salida resultante siempre se imprime ("vigilada") como literal.

Entonces, ¿cómo hago que el watchcomando funcione con una cadena de comandos canalizada [aparte de ponerlos dentro de un script]?


corre man watchy desplázate hacia abajo para ver ejemplos ...
don_crissti

Respuestas:


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

1
Podría valer la pena señalar el enfoque genérico, así como watch sh -c 'command | etc'observar particularmente los enfoques probados en la pregunta.
sourcejedi

@sourcejedi Realmente no he descubierto por qué, pero esto no siempre producirá los mismos resultados.
Michael Mior


2

Si desea enumerar todos los archivos en subdirectorios también, puede usar el comando find con la opción exec.

watchse actualizará cada 30 segundos y findbuscará todos los archivos * .log en el directorio actual (incluidos los subdirectorios) e imprimirá los nombres de archivo y sus últimas 10 líneas:

watch -n30 'find . -name "*.log" -print -exec tail -n10 {} \; '
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.