Я обычно 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
и прокрутить вниз к примерам ...Ответы:
источник
watch sh -c 'command | etc'
особенно если посмотреть на подходы, опробованные в этом вопросе.давай трубить и бежать подряд.
источник
-n 1
?Если вы также хотите перечислить все файлы в подкаталогах, вы можете использовать команду find с опцией exec.
watch
будет обновляться каждые 30 секунд иfind
будет искать все файлы * .log в текущем каталоге (включая вложенные) и печатать имена файлов и их последние 10 строк:источник