Як я вийду з верху, не залишаючи висновок на терміналі?


30

Як змусити мене topвийти аналогічно тому, як lessвиходить, тобто не залишаючи позаду свого результату на екрані?

Це версія в мене:

procps-ng version 3.3.9

Як щодо використання альтернативи, як htop?
DarkHeart

Відповіді:


48

Коли ви починаєте це так ...

top && clear

... екран очищається після виходу з вершини q.

Це діє як less:

tput smcup ; top ; tput rmcup

( smcupперемикається на вторинний екран, де topвиконується команда, і коли ви виходите з top rmcupперемикається назад на звичайний екран)


Ви можете створити псевдонім верхній команді для цього ( Як створити постійний псевдонім Bash? )


3
clearЗдається, також видаляється все, крім останнього екрана буфера прокрутки (тому просто залиште останній екран верху в цьому випадку) - принаймні в xfce4-терміналі та QTerminal. tputВідповідь відмінно працює, особливо в якості псевдоніма дляtop
Xen2050

2
Не забувайте Ctl + L для швидкого виправлення.
jpaugh

О, цікаво; Мені було цікаво, чому lessостанній вихід повністю зник із буфера.
Гонки легкості з Монікою

Ще кілька пропозицій: 1. використовуйте вбудовані, але не вбудовані htop, але 2. псевдоніми команд разом, так що вам не доведеться щоразу вручну їх ланцюжок.
фліт

@flith Я не збираюся красти відповіді інших користувачів ;-)
Rinzwind

31

Як не дивно 1 , це було коротко поведінку top. У 3.3.8 topзробив очищення екрана, але не у версіях минулих чи з тих пір. Дивіться про помилку Red Hat # 977561 :

Очищення екрану є опосередкованим результатом змін в термінальних маніпуляціях, які були введені Джимом Уорнером (автором інструмента "верхній"), щоб придушити затоплення інструменту "верх" сигналами SIGWINCH, генерованими деякими широко використовуваними термінальними додатками. Саме я повідомив про проблему затоплення, і він намагався зробити все можливе, щоб вирішити його, і випустив виправлення проблеми у формі 8 окремих комісій. Послідовність введення очищення екрана має такий хеш: 'dedaf6e1a81738ff08ee8e8523871e12f555ad6d'.

Завдяки звіту про помилки, Джим потім виправив його, щоб знову не очистити вихід у 3.3.9 .

topне має жодних параметрів чи налаштувань конфігурації для керування цим, AFAICT, це абсолютно жорстко кодована поведінка. Ви можете подати запит на функцію за адресою https://gitlab.com/procps-ng/procps/isissue/ .

До цього часу ви могли clearвручну подобатися, як пропонував Rinzwind , або використовувати, tputяк пропонує стілдрівер.


Цікаво, що згаданий вище коміт також має приємне пояснення запропонованої команди steeldriver, оскільки він насправді той самий, що було зроблено в коді:

Буфер прокрутки, який використовується в декількох емуляторах терміналів, може стати справжньою незручністю для користувача після деяких операцій зміни розміру. Часто потрібні додаткові натискання клавіш, щоб правильно відобразити відображення верху.

Після сильного перенапруження ми розкопали дві рядки terminfo, які впливають на відключення / відновлення цього проклятого буфера прокрутки. Вони були добре приховані під заголовком рядків "запускати / закінчувати програми за допомогою cup". У свою чергу, "cup" має справу з можливістю адресації курсору tty.

Нас не хвилює, як ви їх називаєте, або на що вони посилаються, поки вони не виконають роботу. І це справді так! Однак майте на увазі, що є деякі побічні ефекти, деякі з яких навіть можна вважати корисними:

  • enter_ca_mode / smcup / ti вимикає буферизацію прокрутки (і це добре, на що ми завжди сподівалися)

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

... що відповідає командам tput smcupта tput rmcup.


1 Обов’язковий xkcd.


Цікаво, що BSD вгорі (наприклад, на MacOS) також видаляє термінал
Digital Trauma

15

Поведінка, яку ви шукаєте від менш, вбудована в альтернативу, яку називають htop. Ви можете встановити його за допомогою:

sudo apt-get install htop

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

htop

Плюс 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 та статистику машини.

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у window1 та введіть clearwindow2. Тепер прокрутіть назад в обох вікнах (колесо миші). У вікні CTRL+Lви побачите всі рядки (залежно від буфера прокрутки), тоді як у вікні clearви можете прокручувати лише один екран назад . Тобто: clearочищає буфер прокрутки, одночасно CTRL+Lсхожий на $ window_height разів натискання 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.