![Cómo utilizar el comando watch con una cadena canalizada de comandos/programas](https://rvso.com/image/97221/C%C3%B3mo%20utilizar%20el%20comando%20watch%20con%20una%20cadena%20canalizada%20de%20comandos%2Fprogramas.png)
Normalmente uso watch
la utilidad de Linux para observar la salida de un comando repetidamente cada n
segundo, como en watch df -h /some_volume/
.
Pero parece que no puedo usarlo watch
con una serie de comandos canalizados como:
$ watch ls -ltr|tail -n 1
Si hago eso, watch
realmente estoy mirando ls -ltr
y se pasa la salida a tail -n 1
la 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 watch
comando 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 "!!"