Назад | Перейти на главную страницу

Есть ли пейджинговая версия `watch`?

В оболочке UNIX, как я могу получить эффект, аналогичный watch команду, но с разбиением на страницы, чтобы я мог прокручивать вывод, если он занимает более одного экрана?

Другими словами, мне нужна программа, которая watch какие less это к cat.

В качестве примера скажем, я хотел посмотреть, как выводится qstat, Я мог бы использовать

watch qstat

чтобы посмотреть вывод qstat, но это может показать только первый экран.

С пейджинговой версией watch, Я мог бы перемещаться в выводе, поскольку он все еще постоянно обновляется watch. Есть ли в данный момент способ сделать это с помощью существующих утилит?

Вместо того, чтобы изменять команду «смотреть», используйте screen!

Например, предположим, что вам нужно видеть 300 строк в высоту и 100 символов в ширину и перемещаться по ним. После запуска экрана установите размер следующим образом:

C-a :height -w 300
C-a :width -w 100

Теперь запустите команду часов. Затем вы можете использовать C-a <ESC> листать по дисплею.

К сожалению, в режиме копирования дисплей не обновляется. Но если вы хотите настроить, какой раздел окна вы просматриваете, самым простым способом может быть повторный запуск команд высоты / ширины, поскольку по умолчанию ваш терминал показывает правый нижний угол виртуального окна.

Вы можете попробовать это:

$ while vmstat; do sleep 1; done | less

заменить vmstat с участием qstat и отрегулируйте sleep к вашим потребностям.

Многопользовательский: http://www.vanheusden.com/multitail/

Пример:

 vmstat 1 |multitail -j

Прокрутите назад, нажав «b» и пролистав страницу / стрелку вверх / вниз.

Хорошо, я немного поработал watchless функция. Это немного грубо и, похоже, еще не полностью работает, но вот что:

#!/bin/bash -u
out=$(mktemp)
(while [ 1 ]; do
    "$@" > $out;
    sleep 2;
done) &
less $out
kill $!

Вы должны вручную использовать R введите меньше, чтобы обновить дисплей.

Кажется, работает на watchless date но не для watchless qstat или watchless pstree, оба отображаются пустыми. Любые идеи?

Я не понимаю, как это можно реализовать при изменении содержимого строки и watch будет возвращаться к первой строке каждые 2 секунды, даже если вы можете прокрутить вниз.

Некоторые обходные пути:

watch 'qstat | tail -n40' чтобы показать вывод qstat, начиная с 40-й строки снизу

watch 'qstat | grep jsmith' для вывода результатов с помощью grep, чтобы интересующие вас строки всегда находились на первом экране.

Обратите внимание, что вам нужно поместить команды вокруг канала в одинарные кавычки - в противном случае вы будете передавать по конвейеру вывод watch, а не результат qstat.

Чтобы продолжить ответ enkrs,

смотреть qstat | голова -300 | хвост -15 '

предоставит вам произвольные страницы в вывод qstat.

Вот довольно грубый скрипт, который, кажется, работает для нескольких команд, которые я ему использовал.

#!/bin/bash
# ---- mywatch.sh ----

if [ $# -lt 1 && $# -gt 2 ]; then
    echo "Usage: $0 <command> <delay>" 
    exit 1
fi

CMD=$1
if [ $# -eq 2 ]; then
  DELAY=$2
else
  DELAY=2 # default
fi

while : ; do
  ( (echo -e "Every ${DELAY}s: $CMD\n"; $CMD) | less )&
  PID=$!
  sleep $DELAY
  kill -9 $PID &> /dev/null
  clear
done

Используется как таковой:

alias mywatch="~/bin/mywatch.sh"

mywatch vmstat
mywatch "ps aux" # commands in options need to be quoted
mywaych pstree 10 # change delays

Будучи довольно педантичным, переход между обновлениями не такой плавный, как хотелось бы. Естественно, что будучи простым скриптом, он не поддерживает выделение diff (watch -d). Кроме того, можно лучше выполнить синтаксический анализ входных аргументов.

Как насчет просто: tail -f

Я реализую простой скрипт Python, чтобы удовлетворить этот запрос, названный "watchall"

получить это: pip install watchall

замените часы на watchchall и наслаждайтесь прокручиваемым экраном. теперь он поддерживает только флаги -n и -d.

можешь попробовать:

watch command > file

то в вашем файле вы должны увидеть вывод appendend (у меня сейчас нет Linux-бокса, чтобы проверить это)