![Como usar o comando watch com uma cadeia canalizada de comandos/programas](https://rvso.com/image/97221/Como%20usar%20o%20comando%20watch%20com%20uma%20cadeia%20canalizada%20de%20comandos%2Fprogramas.png)
Normalmente uso watch
o utilitário Linux para observar a saída de um comando repetidamente a cada n
segundo, como em watch df -h /some_volume/
.
Mas parece que não consigo usar watch
uma série de comandos canalizados como:
$ watch ls -ltr|tail -n 1
Se eu fizer isso, watch
estou realmente observando ls -ltr
e a saída está sendo passada para tail -n 1
a 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 watch
comando 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 "!!"