Wie kann ich top beenden, ohne die Ausgabe auf dem Terminal zu belassen?

30

Wie komme ich topdazu, ähnlich wie beim Beenden zu beenden, lessdh die Ausgabe nicht auf dem Bildschirm zu belassen?

Dies ist die Version, die ich habe:

procps-ng version 3.3.9
Arraval
quelle
Wie wäre es mit einer Alternative htop?
DarkHeart

Antworten:

48

Wenn du es so startest ...

top && clear

... der Bildschirm wird nach dem Verlassen von oben mit q gelöscht.

Dies wirkt eher wie less:

tput smcup ; top ; tput rmcup

( smcupWechselt zu einem sekundären Bildschirm, auf dem der topBefehl ausgeführt wird, und wenn Sie ihn beenden top rmcup, wird zum normalen Bildschirm zurückgeschaltet.)


Sie könnten den obersten Befehl aliasen, um dies zu tun ( Wie erstelle ich einen permanenten Bash-Alias? )

Rinzwind
quelle
3
clearscheint auch alle bis auf den letzten Bildschirm des Scrollback-Puffers zu löschen (also lasse in diesem Fall nur den letzten Bildschirm von oben) - zumindest in xfce4-terminal und QTerminal. Die tputAntwort funktioniert hervorragend, insbesondere in einem Alias ​​fürtop
Xen2050
2
Vergessen Sie nicht Ctl + L für eine schnelle Lösung.
Jpaugh
Oh, interessant; Ich habe mich gefragt, warum lessdie letzte Ausgabe vollständig aus dem Puffer verschwunden ist.
Leichtigkeit Rennen mit Monica
Einige andere Vorschläge: 1. Verwenden Sie die Funktion "Weit überlegen, aber nicht integriert" htopund 2. Alias ​​der Befehle, damit Sie sie nicht jedes Mal manuell verketten müssen.
Flith
@flith Ich werde nicht die Antworten der anderen Benutzer stehlen
;-)
31

Ironischerweise 1 war dies kurz das Verhalten von top. In 3.3.8 wurde topder Bildschirm gelöscht, jedoch nicht in früheren oder neueren Versionen. Siehe Red Hat-Fehler # 977561 :

Das Löschen des Bildschirms ist ein indirektes Ergebnis von Änderungen der Terminal-Manipulationen, die von Jim Warner (Autor des "Top" -Tools) eingeführt wurden, um das Überfluten des "Top" -Tools mit SIGWINCH-Signalen zu unterdrücken, die von einigen der weit verbreiteten Terminal-Anwendungen erzeugt werden. Ich habe das Überschwemmungsproblem gemeldet, und er hat versucht, sein Bestes zu geben, um es zu beheben, und eine Korrektur für das Problem in Form von 8 separaten Commits veröffentlicht. Das Commit, das das Löschen des Bildschirms einführt, hat den folgenden Hash: 'dedaf6e1a81738ff08ee8e8523871e12f555ad6d'.

Aufgrund des Fehlerberichts hat Jim es dann behoben, um die Ausgabe in 3.3.9 wieder nicht zu löschen .

tophat keine Optionen oder Konfigurationseinstellungen, um dies zu steuern, AFAICT, dies ist ein vollständig fest codiertes Verhalten. Möglicherweise möchten Sie eine Funktionsanforderung unter https://gitlab.com/procps-ng/procps/issues/ einreichen .

Bis dahin könnten Sie Rinzwindclear manuell vorschlagen oder wie von steeldriver vorgeschlagen verwenden tput.


Interessanterweise enthält das oben erwähnte Commit auch eine nette Erklärung des vorgeschlagenen Befehls steeldriver, da es tatsächlich das gleiche ist, was ursprünglich im Code gemacht wurde:

Ein Scrollback-Puffer, der in mehreren Terminalemulatoren verwendet wird, kann für einen Benutzer nach einigen Größenänderungsoperationen eine echte Unannehmlichkeit sein. Zusätzliche Tastenanschläge sind häufig erforderlich, um die Anzeige des Top ordnungsgemäß wiederzugeben.

Nach langem Durchsuchen haben wir zwei Terminfo-Strings entdeckt, die den Effekt haben, dass dieser verdammte Scrollback-Puffer deaktiviert / wiederhergestellt wird. Sie waren unter dem Titel "Programme mit cup starten / beenden" gut versteckt. Im Gegenzug befasst sich 'cup' mit der Cursor-Adressierungsfähigkeit eines tty.

Es ist uns egal, wie Sie sie nennen oder worauf sie sich beziehen, solange sie die Arbeit erledigen. Und diese wirklich! Beachten Sie jedoch, dass es einige Nebenwirkungen gibt, von denen einige sogar als vorteilhaft angesehen werden können:

  • enter_ca_mode / smcup / ti deaktiviert die Scrollback-Pufferung (und das ist gut so, wie wir es uns immer erhofft hatten)

  • exit_ca_mode / rmcup / te stellt den Scrollback-Puffer wieder her (stellt jedoch auch den Bildschirminhalt wieder her, der vor dem Start vorhanden war) (der sich von früheren Ergebnissen des Programmendes unterscheidet) (wobei der zuletzt gerenderte Bildschirm unberührt blieb)

... was den Befehlen tput smcupund entspricht tput rmcup.


1 Obligatorisches xkcd.

muru
quelle
Interessanterweise
Digital Trauma
15

Das Verhalten, nach dem Sie aus weniger suchen, ist in eine Alternative namens htop integriert. Sie können es installieren mit:

sudo apt-get install htop

Insbesondere wird in den alternativen Bildschirmmodus gewechselt, bevor der ursprüngliche Bildschirminhalt beim Schließen von htop beibehalten wird. Es hat auch eine Vielzahl von anderen Verbesserungen über Procps Top. Sobald es installiert ist, können Sie es einfach als normaler Benutzer ausführen:

htop
penguin359
quelle
Plus htopist sehr bunt, fügt Mausunterstützung usw.
WinEunuuchs2Unix
4

Sie könnten verwenden watch:

watch top -b

Standardmäßig wird alle zwei Sekunden eine Aktualisierung durchgeführt. Verwenden Sie z. B. -n1eine Sekunde lang, wenn Sie dieses Verhalten ändern möchten. Zum Beenden watchdrücken Sie Ctrl+ Canstelle der üblichen Q.

Ein anderer Ansatz ist das Öffnen eines neuen Terminalfensters, zB mit xterm:

xterm -e top

Diese verhält sich genau wie topnormalerweise der Fall ist, die schließt Fenster beim Beenden topmit Qund natürlich lässt es keine Ausgabe im Terminal Sie es aus gestartet. Fügen Sie &diesen Befehl am Ende hinzu, um ihn im Hintergrund zu starten und das Terminal sofort wieder freizugeben.

Dessert
quelle
1

Wie die Antwort von Rinzwind zeigt, clearlöscht der Befehl die topAusgabe vom Bildschirm.

Nach dem Beenden können topSie auch Ctrl+ verwenden L, um die topAusgabe vom Bildschirm zu löschen . Nach beiden Befehlen können Sie dennoch den Bildschirm nach oben scrollen, um die alte topAusgabe anzuzeigen .

topVerwenden Sie den folgenden resetBefehl , um den Bildschirm wirklich zu löschen, sodass ein Bildlauf der Ausgabe nicht möglich ist :

top && reset

Eine weitere Option, um einer brandneuen Sitzung ein "frisches Aussehen" zu verleihen, ist das Ausführen eines "ASCII-Begrüßungsbildschirms" (falls vorhanden). In meinem Fall würde ich laufen:

top && reset && now && screenfetch

setze jetzt splash.png zurück

  • Mein nowSkript ruft Wetter, Kalender ( cal) und toiletmit Lust auf Zeit auf.
  • screenfetch Zeichnet das Ubuntu-Logo und die Maschinenstatistik.
WinEunuuchs2Unix
quelle
1
Ich würde nicht empfehlen, .bashrc regelmäßig ohne Notwendigkeit neu zu starten, da in der Regel Zeilen wie export PATH=...:$PATHin dieser Datei vorhanden sind und sie mehrmals ausgeführt wird, um die Datei unnötig zu erweitern PATH. Auch Aufruf neofetchin .bashrcnicht Standardverhalten (obwohl es extravagant aussieht). Zum Beispiel .bashrcpassiert nichts , wenn ich mein Programm erneut starte.
PerlDuck
STRG + L und clearverhalte dich nicht gleich: Versuche es for i in {1..200}; do echo "line $i"; donein zwei verschiedenen, frischen Fenstern. Dann CTRL+Ldrücke window1 und cleartippe window2 ein. Blättern Sie nun in beiden Fenstern zurück (Mausrad). Im CTRL+L-Fenster sehen Sie alle Zeilen (abhängig von Ihrem clearBildlaufpuffer ), während Sie im -Fenster nur einen Bildschirm zurückblättern können . Das heißt: clearLöscht den Scrollback-Puffer, während CTRL+L$ window_height so oft gedrückt wird ENTER(auch Newline genannt).
PerlDuck
1
@PerlDuck neofetchist ein guter Fang, aber es ist ein Derivat, das ich nenne screenfetch. Ich benutze es, um mich daran zu erinnern, dass ich in Ubuntu bin, weil ich Dual Boot habe und Windows Bash einen anderen Begrüßungsbildschirm hat. Ich nehme .bashrcBezug. Was clearund Ctrlbetrifft, war Lmein Punkt, dass sie ähnlich sind, da sie beide die topAusgabe im Scroll-Back-Puffer belassen.
WinEunuuchs2Unix
2
Ich denke, jeder hat andere Dinge in sich .bashrc. Versuchen Sie es curl wttr.in/Edmonton?0, es ist fantastisch. Verwenden Sie curl wttr.in/:help, um Hilfe zu erhalten. Ich habe einen ähnlichen Aufruf in einem /etc/update-motd.d/Scriptlet, sodass ich benachrichtigt werde, wenn ich mich von der Konsole oder von ssh aus anmelde (nicht für jedes Terminalfenster). Wenn Sie das mögen, fügen Sie --silent --max-time 3es dem Curl-Aufruf hinzu, damit es nicht ewig dauert, wenn das Internet langsam ist.
PerlDuck
@PerlDuck Das curl wttr.in/Edmonton?0ist FANTASTISCH! Ich danke dir sehr. Ich werde versuchen, das nach der toiletZeitanzeige auf meinem Startbildschirm
einzugrenzen