watch 'command | othertool | yet-another-tool'
Eu geralmente uso o utilitário watch
linux para assistir a saída de um comando repetidamente a cada n segundos, como em watch df -h /some_volume/
Mas parece que não consigo usar watch
com uma série de comandos como:
$ watch ls -ltr|tail -n 1
Se eu fizer isso, watch
está realmente assistindo ls -ltr
e a saída está sendo passada para tail -n 1
, que não produz nada.
Se eu tentar isso:
$ watch (ls -ltr|tail -n 1)
Eu obtenho
$ watch: syntax error near unexpected token 'ls'
E qualquer um dos seguintes itens falha em algum 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 você fizer isso:
$ watch echo $(ls -ltr|tail -n 1)
Não vejo nenhuma alteração na saída no intervalo dado porque o comando dentro de $()
é executado apenas uma vez e a sequência de saída resultante é sempre impressa ("assistida") como um literal.
Então, como faço com que o comando watch
trabalhe com uma cadeia de comandos canalizada [outra que os coloque dentro de um script]?
watch -n 1 "ls -lrt | tail -n20; date"
vamos falar e seguir em sequência.