Как использовать команду watch с конвейерной цепочкой команд / программ

52

Я обычно watchпользуюсь утилитой linux для просмотра вывода команды несколько раз каждые n секунд, как вwatch df -h /some_volume/

Но мне кажется, что я не могу использовать watchс такой последовательной командой, как:

$ watch ls -ltr|tail -n 1

Если я делаю это, watchдействительно смотрю, ls -ltrи вывод передается, tail -n 1который ничего не выводит.

Если я попробую это:

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

я получил

$ watch: syntax error near unexpected token `ls'

И любое из следующих действий не выполняется по той или иной причине:

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

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

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

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

И, наконец, если сделать это:

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

Я не вижу изменений в выходных данных в заданном интервале, потому что команда внутри $()запускается только один раз, и результирующая выходная строка всегда печатается («просматривается») как литерал.

Итак, как мне заставить watchкоманду работать с конвейерной цепочкой команд [кроме того, что помещать их в сценарий]?

Тулаинс Кордова
источник
запустить man watchи прокрутить вниз к примерам ...
don_crissti

Ответы:

83
watch 'command | othertool | yet-another-tool'
DopeGhoti
источник
1
Возможно, стоит отметить общий подход, watch sh -c 'command | etc'особенно если посмотреть на подходы, опробованные в этом вопросе.
sourcejedi
@sourcejedi Я не совсем понял, почему, но это не всегда дает одинаковые результаты.
Майкл Миор
12
watch -n 1 "ls -lrt | tail -n20; date"

давай трубить и бежать подряд.

Soft Dot IE
источник
для чего -n 1?
Нам G VU
2
@NamGVU: запускать команду каждую 1 секунду
Duc Tran
2

Если вы также хотите перечислить все файлы в подкаталогах, вы можете использовать команду find с опцией exec.

watchбудет обновляться каждые 30 секунд и findбудет искать все файлы * .log в текущем каталоге (включая вложенные) и печатать имена файлов и их последние 10 строк:

watch -n30 'find . -name "*.log" -print -exec tail -n10 {} \; '
yoyomanYo
источник