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

22

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]?

    
por Tulains Córdova 25.10.2016 / 19:42

2 respostas

37
watch 'command | othertool | yet-another-tool'
    
por 25.10.2016 / 19:46
6
watch -n 1 "ls -lrt | tail -n20; date"

vamos falar e seguir em sequência.

    
por 26.10.2016 / 00:33