Jak wyjść z góry bez pozostawiania wyjścia na terminalu?

30

Jak mogę toprzucić palenie podobnie jak w przypadku wyjścia less, to znaczy nie pozostawiać wyjścia na ekranie?

To jest wersja, którą mam:

procps-ng version 3.3.9
Arrawal
źródło
Może skorzystasz z alternatywy htop?
DarkHeart

Odpowiedzi:

48

Po uruchomieniu w ten sposób ...

top && clear

... ekran usuwa się po wyjściu z góry za pomocą q.

To działa bardziej jak less:

tput smcup ; top ; tput rmcup

( smcupprzełącza na drugi ekran, na którym topwykonywane jest polecenie, a po wyjściu top rmcupprzełącza się z powrotem na normalny ekran)


Możesz wykonać alias głównego polecenia, aby to zrobić ( Jak utworzyć trwały alias Bash? )

Rinzwind
źródło
3
clearwydaje się, że kasuje także wszystkie oprócz ostatniego ekranu bufora przewijania (więc w tym przypadku pozostawiając tylko ostatni ekran górny) - przynajmniej w xfce4-terminal i QTerminal. tputOdpowiedź działa świetnie, zwłaszcza w aliasu dlatop
Xen2050
2
Nie zapomnij Ctl + L, aby szybko naprawić.
jpaugh
Interesujące; Zastanawiałem się, dlaczego lessostatnie wyjście całkowicie zniknęło z bufora.
Lekkość ściga się z Moniką
Kilka innych sugestii: 1. użyj znacznie lepszej, ale nie wbudowanej htop, oraz 2. połącz aliasy poleceń, abyś nie musiał ich ręcznie łączyć za każdym razem.
flith
@flith Nie zamierzam kraść odpowiedzi innych użytkowników ;-)
Rinzwind
31

Jak na ironię 1 , to było krótko zachowanie top. W 3.3.8 topwyczyściłem ekran, ale nie w poprzednich wersjach ani później. Zobacz błąd Red Hat # 977561 :

Czyszczenie ekranu jest pośrednim wynikiem zmian w manipulacjach terminalami, które zostały wprowadzone przez Jima Warnera (autora narzędzia „górnego”) w celu powstrzymania zalania „górnego” narzędzia sygnałami SIGWINCH generowanymi przez niektóre z powszechnie używanych aplikacji terminalowych. To ja zgłosiłem problem z powodzią, a on starał się jak najlepiej, aby go rozwiązać, i wydał poprawkę dotyczącą tego problemu w postaci 8 oddzielnych zatwierdzeń. Zatwierdzenie wprowadzające czyszczenie ekranu ma następujący skrót: „dedaf6e1a81738ff08ee8e8523871e12f555ad6d”.

Z powodu zgłoszenia błędu Jim naprawił go, aby ponownie nie usuwał danych wyjściowych w 3.3.9 .

topnie ma opcji ani ustawień konfiguracyjnych, aby to kontrolować, AFAICT, jest to całkowicie zakodowane zachowanie. Możesz złożyć wniosek o funkcję na https://gitlab.com/procps-ng/procps/issues/ .

Do tego czasu możesz clearręcznie zasugerować Rinzwind lub użyć tputpolecenia sugerowanego przez steeldriver.


Co ciekawe, wspomniane powyżej zatwierdzenie ma również ładne wyjaśnienie sugerowanego polecenia steeldriver, ponieważ w rzeczywistości jest takie samo, jak pierwotnie zrobione w kodzie:

Bufor przewijania używany w kilku emulatorach terminali może być prawdziwą niedogodnością dla użytkownika po niektórych operacjach zmiany rozmiaru. Często wymagane są dodatkowe naciśnięcia klawiszy w celu poprawnego renderowania ekranu górnego.

Po wielu przemyśleniach odkryliśmy dwa ciągi terminfo, które powodują wyłączenie / przywrócenie tego cholernego bufora przewijania. Były dobrze ukryte pod tytułem ciągów „uruchamianie / kończenie programów przy użyciu cup”. Z kolei „cup” dotyczy możliwości adresowania kursora tty.

Nie dbamy o to, jak je nazywacie lub do czego się odnoszą, o ile wykonają pracę. I to naprawdę! Należy jednak pamiętać, że istnieją pewne działania niepożądane, z których kilka można nawet uznać za korzystne:

  • enter_ca_mode / smcup / ti wyłącza buforowanie przewijania (i to dobrze, zawsze tego oczekiwaliśmy)

  • exit_ca_mode / rmcup / te przywraca bufor przewijania (ale także przywraca zawartość ekranu istniejącą przed odgórną) (która różni się od poprzednich wyników końcowych programu) (gdzie ostatni renderowany ekran pozostawiono nietknięty)

... co odpowiada poleceniom tput smcupi tput rmcup.


1 Obowiązkowe xkcd.

muru
źródło
Co ciekawe, top BSD (np. Na MacOS) również czyści terminal
Digital Trauma
15

Zachowanie, którego szukasz od mniej, jest wbudowane w alternatywę o nazwie htop. Możesz go zainstalować za pomocą:

sudo apt-get install htop

W szczególności przełącza się na alternatywny tryb ekranu przed zachowaniem oryginalnej zawartości ekranu po zamknięciu htopa. Ma również wiele innych ulepszeń w stosunku do najlepszych procps. Po zainstalowaniu możesz uruchomić go jako zwykły użytkownik:

htop
penguin359
źródło
Plus htopjest bardzo kolorowy, dodaje obsługę myszy itp.
WinEunuuchs2Unix
4

Możesz użyć watch:

watch top -b

Domyślnie aktualizuje się co dwie sekundy, użyj np. -n1Na sekundę, jeśli chcesz zmienić to zachowanie. Aby wyjść watch, naciśnij Ctrl+ Czamiast zwykłego Q.

Innym podejściem jest otwarcie nowego okna terminala, np. Z xterm:

xterm -e top

Zachowuje się dokładnie tak jak topzwykle, okno zamyka się po wyjściu topz niego Qi oczywiście nie pozostawia żadnego wyjścia w terminalu, z którego go uruchomiłeś. Dodaj &na końcu tego polecenia, aby uruchomić je w tle i natychmiast zwolnij terminal ponownie.

deser
źródło
1

Jak wskazuje odpowiedź Rinzwinda, clearpolecenie usuwa topdane wyjściowe z ekranu.

Po wyjściu topmożesz również użyć Ctrl+, Laby usunąć dane topwyjściowe z ekranu. Po każdym poleceniu możesz jednak przewinąć ekran w górę, aby zobaczyć stare topwyjście.

Aby naprawdę wyczyścić ekran, tak że topnie można przewijać danych wyjściowych, użyj resetpolecenia:

top && reset

Inną opcją nadania „świeżego wyglądu” zupełnie nowej sesji jest uruchomienie „ekranu powitalnego ASCII” (jeśli taki masz). W moim przypadku uruchomiłbym:

top && reset && now && screenfetch

zresetuj teraz splash.png

  • Mój nowskrypt nazywa pogodę, kalendarz ( cal) i toiletz fantazyjnym czasem.
  • screenfetch maluje logo Ubuntu i statystyki maszyny.
WinEunuuchs2Unix
źródło
1
Nie polecałbym ponownego uruchamiania .bashrc regularnie bez potrzeby, ponieważ zwykle export PATH=...:$PATHw pliku znajdują się wiersze , a wielokrotne uruchomienie go niepotrzebnie przedłuży PATH. Ponadto, dzwoniąc neofetchna .bashrcnie jest standardowe zachowanie (choć wygląda gustu). Na przykład po ponownym uruchomieniu .bashrcnic się nie dzieje.
PerlDuck,
CTRL + L i clearzachowuj się inaczej : spróbuj for i in {1..200}; do echo "line $i"; donew dwóch różnych, świeżych oknach. Następnie naciśnij CTRL+Lw oknie 1 i wpisz clearw oknie 2. Teraz przewiń do tyłu w obu oknach (kółko myszy). W CTRL+Loknie można wyświetlić wszystkie linie (w zależności od bufora przewijania), natomiast w clearoknie można przewinąć tylko o jeden ekran do tyłu . To znaczy: clearusuwa bufor przewijania, podczas gdy CTRL+Ljest podobny do $ window_height razy naciskając ENTER(aka newline).
PerlDuck,
1
@PerlDuck neofetchto dobry haczyk, ale chyba pochodną screenfetch. Używam go, aby przypomnieć sobie, że jestem w Ubuntu, ponieważ mam podwójny rozruch, a Windows Bash ma inny ekran powitalny. Wyjmę .bashrcreferencję. Jeśli chodzi o cleari Ctrl+ Lmój punkt był podobny, ponieważ oba pozostawiają topwyjście w buforze przewijania wstecz.
WinEunuuchs2Unix
2
Myślę, że każdy ma w sobie różne rzeczy .bashrc. Spróbuj curl wttr.in/Edmonton?0, to jest niesamowite. Użyj, curl wttr.in/:helpaby uzyskać pomoc. Mam podobne wywołanie w /etc/update-motd.d/skrypcie, więc jestem informowany podczas logowania z konsoli lub ssh (nie dla każdego okna terminala). Jeśli Ci się spodoba, dodaj --silent --max-time 3do curl, aby nie trwało wiecznie, jeśli internet jest wolny.
PerlDuck,
@PerlDuck The curl wttr.in/Edmonton?0is AWESOME! Dziękuję bardzo. Spróbuję to wcisnąć po toiletwyświetleniu czasu na ekranie powitalnym :)
WinEunuuchs2Unix