Чи існує версія підкачки "watch"?


24

Як в оболонці UNIX, як я можу отримати подібний ефект до watchкоманди, але з підказками, щоб я міг прокручуватися у виході, якщо він займає більше одного екрана?

Іншими словами, я хочу програму , яка повинна , watchщо lessце cat.

Як приклад, скажімо, я хотів би переглянути вихід qstat, який я міг би використати

watch qstat

дивитися вихід qstat, але це може показувати лише перший скріншот.

За допомогою сторінки підкачки watch, я б зміг переміститися у висновку, оскільки він все ще постійно оновлюється watch. Чи є якийсь спосіб зробити це на даний момент з наявними утилітами?


Це, мабуть, належить до SuperUser або, можливо, ServerFault.

Ви, напевно, праві, як я можу це перемістити?
Девід Дін

Троє людей проголосували за його переміщення поки що; якщо ще два людини (або модератор) проголосують за його переміщення, це відбудеться автоматично.
Грег Хьюгілл

Чому б просто не відкрити велике вікно і взагалі не піти на сторінку?
Марцін

1
тому що мій екран вже заповнений? навіщо використовувати, lessколи можна просто використовувати catі більше вікно?
Девід Дін

Відповіді:


18

Замість того, щоб змінювати команду "watch", використовуйте екран!

Наприклад, скажімо, що вам потрібно вміти бачити 300 ліній висоти та 100 символів ширини і рухатися навколо цього. Після запуску екрана форсуйте розмір таким чином:

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

Тепер запустіть команду годинника. Потім можна скористатися C-a <ESC>сторінками навколо дисплея.

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


Єдине питання тоді полягає в тому, як постійно повторювати команду, при цьому вимикаючи екран між кожним ходом
Девід Дін,

На жаль, я мав на увазі запустити команду watch на екрані. Виправлено.
MikeyB

yartls - ще одна причина кохання на екрані :)
warren

зауважте, що C-це акаctrl-
Генрі

5

Ви можете спробувати це:

в той час як vmstat; спати 1; зроблено | менше

замініть vmstat на qstat і відрегулюйте сон під ваші потреби


все це - це повторення повторення команди less, а це означає, що вам потрібно продовжувати прокручування, щоб побачити останній вихід.
Девід Дін

Так, але ви можете прокрутити назад. Ви не можете мати обох одразу. Зсув f, тобто величина 'F', буде працювати як хвіст.
Spacen Jasset


2

Гаразд, я трохи перейшов на watchlessфункцію. Це трохи грубо, і він, здається, не повністю працює, але ось:

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

Ви повинні використовувати вручну R оновити дисплей, ключ менше.

Схоже, це працює для, watchless dateале не для watchless qstatабо watchless pstree, які обидва показують порожніми. Якісь ідеї?


Ви повинні використовувати другий файл, щоб записати висновок наступного запуску команди, а потім mvцей другий файл у файл, прочитаний lessяк mvатомний. В іншому випадку lessможна подумати, що файл зник, якщо попросити оновлення одночасно із записом у файл "$@" > $out. Також слід записати у вихідний файл один раз перед запуском циклу.
Aurélien Ooms

0

Я не бачу, як це могло б бути реалізовано, коли зміст вмісту рядків буде змінено, і watchповертається до першого рядка кожні 2 секунди, навіть якщо ви можете прокрутити вниз.

Деякі способи вирішення:

watch 'qstat | tail -n40' показати вихід qstat починаючи з 40-го рядка знизу

watch 'qstat | grep jsmith' щоб отримати зображення, щоб рядки, які вас цікавлять, завжди були на першому екрані.

Зауважте, що вам потрібно поставити команди навколо труби в одинарні лапки - інакше ви будете прошивати вихід watch, а не вихід qstat.


0

Щоб продовжити відповідь enkrs,

дивитись 'qstat | голова -300 | хвіст -15 '

отримає вам довільні сторінки у вихід qstat.


0

Ось досить сирий сценарій, який, здається, працює для кількох команд, які я на нього кинув

#!/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). Також розбір вхідних аргументів можна зробити краще.



0

Я реалізую простий скрипт python для задоволення цього запиту з назвою "watchall"

отримати його за: pip install watchall

замініть годинник на годинник і насолоджуйтеся прокручуваним екраном. тепер він підтримує лише -n та -d прапори.


-1

Ви можете спробувати:

watch command > file

тоді у вашому файлі ви повинні побачити додаток (у мене зараз немає строки для linux box, щоб перевірити це)


1
Це не буде робити те, що ви маєте намір, насправді воно просто заповниться fileтим же результатом знову і знову. Це, звичайно, не стосується початкового питання.
Грег Х'югілл

то я не знаю :)

1
Змініть ">" на ">>", щоб він додав дані до файлу?
Рорі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.