Como usar o comando watch com uma cadeia canalizada de comandos/programas

Como usar o comando watch com uma cadeia canalizada de comandos/programas

Normalmente uso watcho utilitário Linux para observar a saída de um comando repetidamente a cada nsegundo, como em watch df -h /some_volume/.

Mas parece que não consigo usar watchuma série de comandos canalizados como:

$ watch ls -ltr|tail -n 1

Se eu fizer isso, watchestou realmente observando ls -ltre a saída está sendo passada para tail -n 1a qual não produz nada.

Se eu tentar isso:

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

eu recebo

$ watch: syntax error near unexpected token `ls'

E qualquer um dos itens a seguir falha por um motivo ou outro:

$ 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 finalmente se fizer isso:

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

Não vejo nenhuma alteração na saída no intervalo especificado porque o comando interno $()é executado apenas uma vez e a sequência de saída resultante é sempre impressa ("observada") como literal.

Então, como faço o watchcomando funcionar com uma cadeia de comandos canalizada [além de colocá-los dentro de um script]?

Responder1

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

Responder2

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

vamos canalizar e correr em sequência.

Responder3

Use uma combinação de aspas simples ( ') e aspas duplas ( "). Por exemplo:

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

Responder4

Digamos que você execute um comando e queira assisti-lo; usar:

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

informação relacionada