Как выйти из вершины, не выходя из терминала?

30

Как мне topвыйти так же, как lessвыходит, то есть не оставить после себя вывод на экран?

Это версия у меня есть:

procps-ng version 3.3.9
Arraval
источник
Как насчет использования альтернативы, как htop?
DarkHeart

Ответы:

48

Когда вы начинаете это так ...

top && clear

... экран очищается после выхода из верхней части с q.

Это действует больше как less:

tput smcup ; top ; tput rmcup

( smcupпереключается на дополнительный экран, где выполняется topкоманда, а когда вы выходите, top rmcupвозвращается к обычному экрану)


Для этого вы можете создать псевдоним команды top ( Как создать постоянный псевдоним Bash? )

Rinzwind
источник
3
clearКажется, что стирает все, кроме последнего экрана буфера прокрутки (так что просто оставляем последний экран сверху в этом случае) - по крайней мере, в xfce4-терминал и QTerminal. tputОтвет отлично работает, особенно в качестве псевдонима дляtop
Xen2050
2
Не забудьте Ctl + L для быстрого исправления.
jpaugh
Ох, интересно; Мне было интересно, почему lessпоследний вывод полностью исчез из буфера.
Легкость гонок с Моникой
Некоторые другие предложения: 1. использовать гораздо более качественные, но не встроенные команды htop, и 2. объединять команды вместе, чтобы вам не приходилось каждый раз вручную их объединять.
flith
@flith Я не собираюсь воровать ответы других пользователей ;-)
Rinzwind
31

По иронии судьбы 1 , это было кратко поведение top. В 3.3.8, topдействительно, очистить экран, но не в версиях прошлого или с тех пор. Смотрите Red Hat ошибка # 977561 :

Очистка экрана является косвенным результатом изменений в манипуляциях с терминалами, которые были внесены Джимом Уорнером (автором инструмента «top»), чтобы подавить заполнение «top» инструмента сигналами SIGWINCH, генерируемыми некоторыми из широко используемых терминальных приложений. Именно я сообщил о проблеме затопления, и он попытался сделать все возможное, чтобы решить ее, и выпустил исправление для этой проблемы в форме 8 отдельных коммитов. Фиксация, вводящая очистку экрана, имеет следующий хеш: 'dedaf6e1a81738ff08ee8e8523871e12f555ad6d'.

Из-за сообщения об ошибке Джим затем исправил его, чтобы снова не очистить вывод в 3.3.9 .

topне имеет опций или настроек конфигурации для управления этим, AFAICT, это полностью жестко запрограммированное поведение. Возможно, вы захотите подать запрос на функцию по адресу https://gitlab.com/procps-ng/procps/issues/ .

А до тех пор вы могли clearвручную предлагать Rinzwind или использовать, tputкак предлагает Steeldriver.


Интересно, что упомянутый выше коммит также имеет хорошее объяснение предложенной команды steeldriver, потому что на самом деле он такой же, как и в коде:

Буфер обратной прокрутки, используемый в нескольких терминальных эмуляторах, может быть реальным неудобством для пользователя после некоторых операций изменения размера. Для правильной визуализации отображения верхней части часто требуется дополнительное нажатие клавиш.

После долгой работы мы обнаружили две строки terminfo, которые отключают / восстанавливают этот проклятый буфер прокрутки. Они были хорошо спрятаны под заголовком строк «запуск / завершение программ с использованием cup». В свою очередь, «cup» имеет дело с возможностью адресации курсора tty.

Нам все равно, как вы их называете или к чему они относятся, если они выполняют свою работу. И это действительно так! Имейте в виду, однако, что есть некоторые побочные эффекты, некоторые из которых можно даже считать полезными:

  • enter_ca_mode / smcup / ti отключает буферизацию с прокруткой (и это хорошо, это то, на что мы всегда надеялись)

  • exit_ca_mode / rmcup / te восстанавливает буфер прокрутки (но также восстанавливает содержимое экрана, существующее до начала) (что отличается от предыдущих конечных результатов программы) (где последний отображенный экран был оставлен без изменений)

... что соответствует tput smcupи tput rmcupкомандам.


1 Обязательный xkcd.

Мур
источник
Интересно, что BSD top (например, на MacOS) также очищает терминал
Digital Trauma
15

Поведение, которое вы ищете из меньшего, встроено в альтернативу htop. Вы можете установить его с помощью:

sudo apt-get install htop

В частности, он переключается в режим альтернативного экрана перед началом сохранения исходного содержимого экрана при закрытии htop. У этого также есть множество других улучшений по сравнению с вершиной procps. После установки вы можете просто запустить его как обычный пользователь:

htop
penguin359
источник
Плюс htopочень красочный, добавляет поддержку мыши и т. Д.
WinEunuuchs2Unix
4

Вы можете использовать watch:

watch top -b

Обновление по умолчанию происходит каждые две секунды, например, -n1на одну секунду, если вы хотите изменить это поведение. Чтобы выйти watch, нажмите Ctrl+ Cвместо обычного Q.

Другой подход заключается в открытии нового окна терминала, например, с помощью xterm:

xterm -e top

Это ведет себя точно так же, как topобычно, окно закрывается, когда вы выходите topс, Qи, конечно, оно не оставляет вывода в терминале, с которого вы его запустили. Добавьте &в конец этой команды, чтобы запустить ее в фоновом режиме и сразу же снова отпустите терминал.

Десерт
источник
1

Как указывает ответ Ринзвинда, clearкоманда очищает topвывод с экрана.

После выхода topвы также можете использовать Ctrl+, Lчтобы очистить topвывод с экрана. После любой команды вы все равно можете прокрутить экран вверх, чтобы увидеть старый topвывод.

Чтобы действительно очистить экран, так что topвывод не может быть прокручен обратно, используйте resetкоманду:

top && reset

Другой вариант, чтобы придать этому «свежему виду» совершенно новый сеанс, - запустить «заставку ASCII» (если она у вас есть). В моем случае я бы запустил:

top && reset && now && screenfetch

сбросить сейчас splash.png

  • Мой nowскрипт вызывает погоду, календарь ( cal) и toiletс прикольным временем.
  • screenfetch рисует логотип Ubuntu и характеристики машины.
WinEunuuchs2Unix
источник
1
Я бы не рекомендовал повторно работает .bashrc регулярно , без необходимости , потому что , как правило , есть такие строки export PATH=...:$PATHв этом файле и запустить его несколько раз будет излишне продлить PATH. Кроме того , вызов neofetchв .bashrcне стандартное поведение (хотя это выглядит фантазии). Например, когда я снова запускаю, .bashrcничего не происходит.
PerlDuck
CTRL + L и clearвести себя не одинаково: попробуйте for i in {1..200}; do echo "line $i"; doneв двух разных, свежих окнах. Затем нажмите CTRL+Lв окно 1 и введите clearв окно 2. Теперь прокрутите назад в обоих окнах (колесико мыши). В CTRL+L-window вы можете увидеть все строки (в зависимости от буфера прокрутки), а в clear-window вы можете прокрутить только один экран назад . То есть: clearочищает буфер прокрутки, пока CTRL+Lон аналогичен нажатию $ window_height times ENTER(aka newline).
PerlDuck
1
@PerlDuck neofetch- хороший улов, но я думаю, что это производная screenfetch. Я использую его, чтобы напомнить себе, что я нахожусь в Ubuntu, потому что у меня двойная загрузка, а Windows Bash имеет другой экран-заставку. Я возьму .bashrcссылку. Что касается clearи Ctrl+L я хочу сказать, что они похожи в том, что они оба оставляют topвывод в буфере обратной прокрутки.
WinEunuuchs2Unix
2
Я думаю, что у каждого разные вещи .bashrc. Попробуй curl wttr.in/Edmonton?0, это круто. Используйте, curl wttr.in/:helpчтобы получить помощь. У меня похожий вызов в /etc/update-motd.d/скриптлете, поэтому я получаю информацию при входе в систему с консоли или ssh (не для каждого окна терминала). Если вам это нравится, добавьте --silent --max-time 3вызов curl, чтобы интернет не работал вечно.
PerlDuck
@PerlDuck curl wttr.in/Edmonton?0УДИВИТЕЛЬНЫЙ! Огромное спасибо. Я постараюсь сжать это после toiletотображения времени на моем заставке :)
WinEunuuchs2Unix