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

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

Я обычно использую 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команду работать с конвейерной цепочкой команд [кроме помещения их в скрипт]?

решение1

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

решение2

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

давайте вы трубите и бегите в ряд.

решение3

Используйте комбинацию одинарных кавычек ( ') и двойных кавычек ( "). Например:

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

решение4

Предположим, вы запустили команду, а затем хотите ее просмотреть. Используйте:

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

Связанный контент