Come posso uscire da top senza lasciare l'output sul terminale?


30

Come posso topuscire in modo simile al modo in cui si lesschiude, cioè non lasciando indietro il suo output sullo schermo?

Questa è la versione che ho:

procps-ng version 3.3.9

Che ne dici di usare un'alternativa, come htop?
DarkHeart

Risposte:


48

Quando lo avvii in questo modo ...

top && clear

... lo schermo si cancella dopo essere uscito dall'alto con q.

Questo si comporta più come less:

tput smcup ; top ; tput rmcup

( smcuppassa a una schermata secondaria in cui topviene eseguito il comando e quando si esce top rmcuptorna alla schermata normale)


Potresti alias il comando principale per farlo ( Come faccio a creare un alias Bash permanente? )


3
clearsembra cancellare tutto tranne l'ultimo schermo anche del buffer di scrollback (quindi in questo caso lasciando solo l'ultimo schermo in alto) - almeno in xfce4-terminal e QTerminal. La tputrisposta funziona benissimo, soprattutto in un alias pertop
Xen2050

2
Non dimenticare Ctl + L per una soluzione rapida.
jpaugh

Oh, interessante; Mi chiedevo perché lessl'ultimo output fosse completamente scomparso dal buffer.
Lightness Races con Monica

Alcuni altri suggerimenti: 1. usa il htopcomando di gran lunga superiore ma non incorporato e 2. alias i comandi insieme in modo da non doverli incatenare manualmente ogni volta.
Flith,

@flith Non ho intenzione di rubare le risposte degli altri utenti ;-)
Rinzwind

31

Ironia della sorte 1 , questo è stato brevemente il comportamento di top. In 3.3.8, topha cancellato lo schermo, ma non nelle versioni precedenti o successive. Vedi bug Red Hat # 977561 :

La cancellazione dello schermo è il risultato indiretto dei cambiamenti nelle manipolazioni dei terminali introdotti da Jim Warner (autore dello strumento "top") al fine di sopprimere l'inondazione dello strumento "top" con segnali SIGWINCH generati da alcune delle applicazioni terminali più utilizzate. Sono stato io a segnalare il problema delle inondazioni e ha cercato di fare del suo meglio per risolverlo e ha rilasciato una correzione per il problema sotto forma di 8 commit separati. Il commit che introduce la cancellazione dello schermo ha il seguente hash: 'dedaf6e1a81738ff08ee8e8523871e12f555ad6d'.

A causa del bug report, Jim lo ha quindi corretto per non cancellare nuovamente l'output in 3.3.9 .

topnon ha opzioni o impostazioni di configurazione per controllare questo, AFAICT, questo è un comportamento interamente codificato. È possibile che si desideri presentare una richiesta di funzione su https://gitlab.com/procps-ng/procps/issues/ .

Fino ad allora, potresti suggerireclear manualmente Rinzwind o utilizzare tputcome suggerisce Steeldriver.


È interessante notare che il commit di cui sopra ha anche una bella spiegazione del comando suggerito da Steeldriver, perché in realtà è lo stesso di quello che è stato originariamente fatto nel codice:

Un buffer di scrollback utilizzato in diversi emulatori di terminale potrebbe essere un vero inconveniente per un utente dopo alcune operazioni di ridimensionamento. Una o più battute di tasto sarebbero spesso necessarie per rendere correttamente il display di top.

Dopo un sacco di investigazioni abbiamo scoperto due stringhe di terminfo che hanno l'effetto di disabilitare / ripristinare quel dannato buffer di scrollback. Erano ben nascosti sotto il titolo di stringhe "per avviare / terminare i programmi usando cup". A sua volta, 'cup' si occupa della capacità di indirizzamento del cursore di un tty.

Non ci interessa come li chiami o a cosa si riferiscono fino a quando svolgono il lavoro. E questi lo fanno davvero! Tieni presente, tuttavia, che ci sono alcuni effetti collaterali, molti dei quali possono anche essere considerati benefici:

  • enter_ca_mode / smcup / ti disabilita il buffering di scrollback (e va bene, è quello che avevamo sempre sperato)

  • exit_ca_mode / rmcup / te ripristina il buffer di scorrimento (ma ripristina anche il contenuto dello schermo pre-top esistente) (che è diverso dai risultati di fine programma precedenti) (dove l'ultima schermata renderizzata non è stata toccata)

... che corrisponde ai comandi tput smcupe tput rmcup.


1 xkcd obbligatorio.


È interessante notare che BSD top (ad esempio su MacOS) cancella anche il terminale
Digital Trauma

15

Il comportamento che stai cercando da meno è integrato in un'alternativa chiamata htop. Puoi installarlo con:

sudo apt-get install htop

In particolare, passa alla modalità schermo alternativo prima di iniziare a preservare il contenuto dello schermo originale quando si chiude htop. Ha anche una varietà di altri miglioramenti rispetto al top di Procps. Una volta installato, puoi semplicemente eseguirlo come utente normale:

htop

Inoltre htopè molto colorato, aggiunge il supporto del mouse, ecc.
WinEunuuchs2Unix

4

Puoi usare watch:

watch top -b

L'impostazione predefinita si aggiorna ogni due secondi, utilizzare ad es. -n1Per un secondo se si desidera modificare questo comportamento. Per uscire watch, premi Ctrl+ Cinvece del solito Q.

Un altro approccio è l'apertura di una nuova finestra del terminale, ad esempio con xterm:

xterm -e top

Questo comporta esattamente come topnormalmente fa, si chiude la finestra quando si chiude topcon la Qe, naturalmente, non lascia alcuna uscita nel terminale è stato avviato da. Aggiungi &alla fine di questo comando per avviarlo in background e rilasciare di nuovo immediatamente il terminale.


1

Come sottolinea la risposta di Rinzwind, il clearcomando cancella l' topoutput dallo schermo.

Dopo essere uscito toppuoi anche usare Ctrl+ Lper cancellare l' topoutput dallo schermo. Dopo entrambi i comandi, è comunque possibile scorrere verso l'alto lo schermo per vedere il vecchio topoutput.

Per cancellare davvero lo schermo, in modo che l' topoutput non possa essere riportato indietro, usare il resetcomando:

top && reset

Un'altra opzione per dare quel "nuovo look" di una nuova sessione è eseguendo una "schermata di avvio ASCII" (se ne hai una). Nel mio caso avrei eseguito:

top && reset && now && screenfetch

ripristina ora splash.png

  • La mia nowsceneggiatura chiama weather, calendar ( cal) e toiletcon tempo di fantasia.
  • screenfetch dipinge il logo Ubuntu e le statistiche della macchina.

1
Non consiglierei di rieseguire .bashrc regolarmente senza necessità perché di solito ci sono linee come export PATH=...:$PATHin quel file e eseguirlo più volte prolungherà inutilmente il file PATH. Inoltre, chiamando neofetchin .bashrcnon è un comportamento standard (anche se sembra di fantasia). Ad esempio, quando riesco a ripetere il mio funzionamento, .bashrcnon accade nulla di evidente.
PerlDuck,

CTRL + L e non siclear comportano allo stesso modo: prova in due finestre diverse e fresche. Quindi premi in window1 e digita window2. Ora scorrere indietro in entrambe le finestre (rotellina del mouse). Nella finestra è possibile visualizzare tutte le righe (a seconda del buffer di scorrimento), mentre nella finestra è possibile scorrere indietro di una schermata. Cioè: cancella il buffer di scrollback mentre è simile a $ window_height volte premendo (aka newline). for i in {1..200}; do echo "line $i"; doneCTRL+LclearCTRL+LclearclearCTRL+LENTER
PerlDuck,

1
@PerlDuck neofetchè una buona cattura, ma credo sia un derivato screenfetch. Lo uso per ricordare a me stesso che sono su Ubuntu perché ho il dual boot e Windows Bash ha una schermata di avvio diversa. Prenderò il .bashrcriferimento. Per quanto riguarda cleare Ctrl+ il Lmio punto era che sono simili in quanto entrambi lasciano l' topoutput nel buffer di scorrimento indietro.
WinEunuuchs2Unix

2
Penso che ognuno abbia cose diverse nelle loro .bashrc. Prova curl wttr.in/Edmonton?0, è fantastico. Utilizzare curl wttr.in/:helpper ottenere aiuto. Ho una chiamata simile in uno /etc/update-motd.d/scriptlet, quindi mi informo quando accedo dalla console o da ssh (non per ogni finestra del terminale). Se ti piace, aggiungi --silent --max-time 3alla chiamata curl in modo che non ci vorrà per sempre se internet è lento.
PerlDuck,

@PerlDuck The curl wttr.in/Edmonton?0è FANTASTICO! Grazie mille. Proverò a comprimerlo dopo la toiletvisualizzazione dell'ora sulla mia schermata iniziale :)
WinEunuuchs2Unix
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.