Cómo utilizar el comando watch con una cadena canalizada de comandos/programas

Cómo utilizar el comando watch con una cadena canalizada de comandos/programas

Normalmente uso watchla utilidad de Linux para observar la salida de un comando repetidamente cada nsegundo, como en watch df -h /some_volume/.

Pero parece que no puedo usarlo watchcon una serie de comandos canalizados como:

$ watch ls -ltr|tail -n 1

Si hago eso, watchrealmente estoy mirando ls -ltry se pasa la salida a tail -n 1la cual no se genera 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 por 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 interno $()se ejecuta solo una vez y la cadena de salida resultante siempre se imprime ("vigila") como un literal.

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

Respuesta1

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

Respuesta2

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

vamos a canalizar y ejecutar en una fila.

Respuesta3

Utilice una combinación de comillas simples ( ') y comillas dobles ( "). Por ejemplo:

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

Respuesta4

Digamos que ejecuta un comando y luego quiere verlo; usar:

ls -lrt | tail -n20; date
watch "!!"

información relacionada