Quali comandi posso usare per resettare e cancellare il mio terminale?


64

Ho usato il comando:

reset

per cancellare il mio terminale. Anche se sono abbastanza sicuro che non è quello che dovrei fare. Ripristina, come suggerisce il nome, ripristina l'intero terminale (cambia molte cose). Ecco cosa voglio:

Fondamentalmente voglio usare il comando clear. Tuttavia, se si cancella e quindi si scorre verso l'alto, si ottiene ancora tonnellate di roba da prima. In generale questo non è un problema, ma sto esaminando i log gross che sono lunghi e voglio assicurarmi di visualizzare solo quello più recente. So che potrei usare moreo qualcosa del genere, ma preferisco questo approccio.


sembra esserci molta confusione su ciò che viene chiesto esattamente qui. puoi chiarire la domanda? cosa stai cercando di ottenere esattamente, cancellando il buffer di scrollback del terminale? (in tal caso, quale applicazione terminale stai usando?)
Quack Quixote

1
Ctrl-L cancella lo schermo in bash (in modalità emacs, che è di default), simile all'esecuzione del programma di cancellazione.

Ho appena provato questo nel terminale bash in IntelliJ IDE. Funziona bene e cancella lo scrollback che è esattamente quello che volevo. Grazie.
Ian Lewis,

So che è stata data una risposta a morte, ma penso che tu voglia clear && printf '\033[3J'. Nessun reset del terminale, basta cancellare il testo sullo schermo. Vedi questo post: superuser.com/questions/555554/…
jwd

Risposte:


57

Il buffer di scrollback non è una funzionalità di bash ma del programma terminale. Non hai detto quale terminale stai usando.

Se stai usando xterm potresti essere in grado di cancellare le linee salvate facendo eco a ESC-c sul terminale.

Questo potrebbe funzionare o meno con qualsiasi programma terminale in uso.

Su Linux probabilmente funzionerà:

echo -e '\0033\0143'

su FreeBSD echo non accetta -e quindi puoi provare:

printf '\033\143'

Sto usando xterm. Tuttavia non capisco cosa intendi. Dovrei scrivere letteralmente echo ESC-c?
sixtyfootersdude,

2
@sixtyfootersdude: No, non letterale ESC. Leggi gli articoli "Escape character" e "Control character" su Wikipedia - ESCè spesso usato per indicare il carattere ASCII 0x1B, che puoi inserire premendo ^Vseguito da Esc.
Grawity

1
Non dovresti. Se la soluzione prevede la scrittura di sequenze di escape terminali non elaborate, è necessario ripensare la soluzione. Vorrei usare "meno" invece di cat. Se vuoi davvero conoscere le "sequenze di escape terminali", Google può aiutarti.
Craig,

2
@HaraldNordgren è meglio usare la stampa più standard di echo -e.
Brava persona

3
Perché \0143invece di c?
Ruakh,

51

Usa lo strumento giusto per ogni lavoro:

  • Utilizzare clearper cancellare la finestra del terminale.

  • Utilizzare resetper ripristinare il terminale quando viene incasinato dalle sequenze di controllo.

  • Utilizzare catsolo quando si desidera trasmettere in streaming molti dati da un luogo all'altro senza interruzioni .

  • Utilizzare un programma cercapersone come lesso mostper visualizzare le pagine di output.

  • Utilizzare tail -f /var/log/foo.log /var/log/bar.logper guardare diversi file di registro.

    • Con GNU tail, l' -Fopzione è migliore perché può continuare a seguire il file anche quando appare un nuovo file al suo posto, come è comune per i file di registro.

14
Questo non risponde davvero alla mia domanda.
sixtyfootersdude,

7
Sì lo fa. Non file cat per leggerli, file cat per concatenarli. Usa meno o più per leggere i file, quindi non hai lo stesso problema.
Rich Bradshaw,

Cerca "uso inutile del gatto"
galois,

Molte persone si oppongono all'utilizzo di catleggere qualsiasi cosa, ma per file di piccole dimensioni in realtà ha molto senso per catloro piuttosto che usare less. Una volta che il file è stato scaricato sul terminale, è possibile cercare / scorrere indietro fino al file tutte le volte che si desidera, anziché dover chiudere lessprima di fare qualsiasi altra cosa.
GKFX

23

Giusto per fornire la risposta tecnica: resetreinizializzare il terminale, come se fosse riaperto da zero. stty sanefarà molte delle stesse funzionalità (senza il reset). Questa è la stessa cosa di ^L(Ctrl + L) (irrc) e tput clear. Nonostante ciò che il precedente poster (@grawity) diceva, clearnon ha prodotto un sacco di nuove righe. Invia il TERMreset come definito in terminfoo termcap, per me, usando gnome-terminal(xterm) è lo stesso del comando perl -e'print "\33[H\33[2J"'.

Se si desidera solo cancellare il buffer, rispetto al ripristino dell'intero terminale, provare questo tput reset. Si dovrebbe essere molto veloce, e fare quello che vuoi. (Anche se dovresti davvero leggere i file con less)

tput reset, invia il valore terminfo per reset - sul mio terminale (xterm) è lo stesso di perl -e'print "\33c"'


1
Ho Non dico clearuscite un mucchio di nuove righe. Ho appena fornito un comando in alternativa , perché clearcancella solo lo schermo ma non il buffer di scorrimento. (Non in PuTTY o Konsole, almeno.)
Grawity

1
Proprio per questo motivo, stampare un sacco di righe non è in realtà un'alternativa per cancellare - non hai idea di cosa farà il terminale con il segnale chiaro. È meglio dire alle nuove persone che hai un database che sa come gestire il tuo terminale, ha due valori-chiave uno che mappa clearcome un nome di segnale su un segnale e uno che si mappa resetsu un segnale - e solo quest'ultimo risulta in un buffer di scorrimento indietro azzerato. resetinvia quest'ultimo, sopra facendo altre cose divertenti.
Evan Carroll,

1
Secondo la domanda iniziale di sixtyfootersdude, clearnon senza reimpostare la sua scrollback. ( ESC cfunziona in xterme basato su VTE, ma non in PuTTY e Konsole.) Neanche lui vuole usarlo reset, perché reimposta più di quanto vuole. (Non so quale terminale utilizza - ma confronta sttyprima e dopo il ripristino.)
Grawity

2
come ho detto, probabilmente lo desidera tput reset, che invia il segnale di reset al terminale, senza reinizializzare il termine. "reset - Invece di inserire stringhe di inizializzazione, le stringhe di reset del terminale verranno emesse se presenti (rs1, rs2, rs3, rf). Se le stringhe di reset non sono presenti, ma lo sono le stringhe di inizializzazione, verranno emesse le stringhe di inizializzazione. Altrimenti, reset agisce in modo identico a init. " Qui, abbiamo reimpostato le stringhe in modo che le stringhe init non vengano eseguite.
Evan Carroll,

+1: per il suggerimento, tuttavia tput resetè piuttosto lento (uguale a reset). printf '\033\143'è molto più veloce. C'è qualche motivo per cui il metodo printf è pericoloso / cattivo?
sixtyfootersdude,

9

Un altro terminale è iTerm2 e ha una strana sequenza di escape usata per cancellare lo scrollback. In una shell Bash, uso qualcosa del tipo:

echo -ne '\033]50;ClearScrollback\a'

in una sceneggiatura. Quindi sostanzialmente è un personaggio ESC, seguito da " ]50;ClearScrollback" e quindi da un personaggio BEL.


1
CMD + K funziona in iTerm2. CTRL + K funziona in molti altri.
Blockloop,

Mi piace questa soluzione perché mi consente di cancellare il buffer di scrollback iTerm2 da uno script di shell, quando le cose piacciono cleare resetno. Questa non è davvero la migliore risposta alla domanda, però. Penso che la risposta giusta per quel caso sia qualunque cosa offra l'applicazione del terminale, come command-K in iTerm2, control-K in altri, ecc.
LS

8

Probabilmente il modo migliore per cancellare tutto è usare la funzione del terminale:

  • Konsole: Ctrl+ Shift+ KVisualizza → Cancella scorrimento e ripristino
  • Terminale GNOME: Modifica → Ripristina e cancella
  • PUTTY: Ctrl+ right-click→ Cancella scorrimento

In questo modo entrambi i buffer vengono cancellati e lo stato del terminale viene riportato esattamente a quello che era all'avvio (che potrebbe essere o meno lo stesso dell'uso reset).


Hmm, non ce l'ho sotto il mio gnomo ...
sixtyfootersdude il

@sixtyfootersdude: Sono sicuro che è lì, semplicemente non conosco il menu esatto (non posso usare gnome-terminalme stesso al momento) ... Dai un'occhiata a "Strumenti" e altri menu.
Grawity,

In xterm il suo pulsante ctrl-centrale -> "resetta e cancella le linee salvate"
Craig

3
meno -W + F foo.log

+Fè per "follow", simile a tail -fma consente anche di scorrere indietro.

Tutti i terminali basati su vte (GNOME, Xfce, Roxterm) e KDE Konsole ti consentono di usare la rotella di scorrimento per scorrere all'interno less. Lo trovo abbastanza conveniente.


Alternativa a clear:

perl -e 'print "\ n" x512;'

xterm -e 'tail -f foo.log'

3

Su Mac OS X Terminal.app:

Visualizza -> Cancella scorrimento (o command- K)


@Rohit Se la domanda era specificamente su Mac OS X Terminal.app, allora sì, questa è un'ottima risposta. Tuttavia, la domanda originale è ambigua, meglio che posso dire, riguardo a quale terminale e sistema operativo sono in gioco.
David J.

2

Non è un problema "Bash". Dipende dal terminale che usi. Ad esempio, utilizzo "iterm2" con macbook per connettere una macchina Linux remota. È possibile utilizzare "comando + K" per pulire il buffer oppure nel menu selezionare "Modifica" -> "Cancella buffer".


1

Per cancellare lo schermo della console e il buffer di scorrimento durante l'esecuzione di PuTTY, questo funziona per me:

echo -en "\ec\e[3J"

In realtà si tratta di 2 sequenze "Esc" che agiscono in modo indipendente ... possono essere utilizzate in qualsiasi ordine:

# clears the console screen, but not the scrollback buffer
# this is actually the escape code to "reset" the terminal
echo -en "\ec"

# clears the scrollback buffer, but not the console screen
# screen content remains, and cursor position remains at its last position
echo -en "\e[3J"

L'uso delle echo -en "\ec"reimpostazioni del terminale potrebbe modificare alcune delle altre impostazioni del terminale. Invece di "Ripristina", potresti fare questo:

# position the cursor to "Home" (Top Row, First Column)
echo -en "\e[H"

# Erase down: clear the screen from the cursor down to the bottom of the screen.
echo -en "\e[J"

# Note: this is supposed to clear the screen and position the cursor to home,
# but it didn't work like that for me. It cleared the entire screen (above and 
# below the cursor), but left the cursor at its last position.
echo -en "\e[2J"

# putting everything together
echo -en "\e[H\e[J\e[3J"

Puoi metterlo in uno script di shell e funziona bene.


Nel caso in cui ci siano alcune dipendenze del sistema:

Sto usando PuTTY Connection Manager (versione 0.7.1 BETA (build 136)), con PuTTY (versione 0.60).

Digitando:

echo \"$TERM\"; /bin/sh --version

rapporti:

"xterm"
GNU bash, version 4.1.2(1)-release-(x86_64-redhat-linux-gnu) ...

1

Per pulire il buffer dello schermo per l'hardware TTY in FreeBSD puoi usare "vidcontrol - controllo della console di sistema e utilità di configurazione" con il parametro -C Cancella il buffer della cronologia.

vidcontrol -C

il comando cancellerà tutto il buffer dello schermo per la console corrente, al di sopra di quello che vedi al momento. Potresti voler prima "cancellare" o no - dipende da te.


0

Se vuoi essere sicuro di guardare le voci più recenti in un file di registro, probabilmente è meglio usare tail invece di clear/ catche presumo tu stia usando.


In realtà sto usando tail -f (registri continui), tuttavia, perché occasionalmente sputano migliaia di righe, è importante avere il scroll back. Tuttavia, sarebbe bello sapere che non sto accigliando a un vecchio registro.
sixtyfootersdude,

0

Hmmm. Immagino che se corri Konsole, sei sfortunato. In passato si poteva semplicemente "cancellare lo scrollback". Konsole non ti permetterà più di farlo. Devi anche ripristinarlo, quindi uccide qualsiasi programma che stavi eseguendo. Immagino di aver bisogno di un nuovo programma terminale ......

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.