В оболочке 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-бокса, чтобы проверить это)