Cancella una schermata del terminale per davvero


382

L'uso del clearcomando sul terminale fa solo credere che lo schermo sia stato cancellato ... puoi ancora vedere l'output dei comandi precedenti quando scorri con il mouse. Questo rende la vita difficile quando stai affogando in uno tsunami di testo.

Varie soluzioni (codice di escape ecc.) Che si possono trovare su Internet sono solo varianti di ciò che il comando clear fa già.

Quindi, come si fa a cancellare davvero i contenuti di un terminale in Linux?


44
Lo classificherei come "strumenti software comunemente usati dai programmatori" (menzionato nelle FAQ come valido).
Autodidatta,

5
Quello che stai veramente chiedendo è "Come posso cancellare il buffer di scroll-back del terminale?" che è indipendente dalla shell (Bash) o Ubuntu.
In pausa fino a nuovo avviso.

@ spiderplant0 probabilmente perché AskUbuntu è il posto giusto per questo - in questo momento. Non esisteva quando questo è stato chiesto, quindi è stato chiuso come fuori tema, anche se non è così.
jcollum,

1
Questa è una domanda più generale, che riguarda non solo Ubuntu o bash, come ha notato @Dennis. Vorrei cambiare l'argomento "Cancella lo schermo bash di Ubuntu per davvero" -> "Cancella uno schermo terminale per davvero"
Ra_11

Esistono molti tipi diversi di terminali con cui è possibile eseguire Bash (il termine " terminale bash " non ha senso). La "cancellazione" non è applicabile a tutti loro - a volte, l'approssimazione più vicina è quella di strappare la carta e bin / distruggere / bruciare / distruggere il pezzo che non si desidera.
Toby Speight,

Risposte:


500

Usa il seguente comando per fare una schermata chiara invece di aggiungere semplicemente nuove righe ...

printf "\033c"

sì, questo è un 'printf' sul prompt di bash.

Probabilmente vorrai definire un alias però ...

alias cls='printf "\033c"'

Spiegazione

\033 == \x1B == 27 == ESC

Quindi questo diventa <ESC>cqual è il codice di escape VT100 per ripristinare il terminale. Ecco alcune ulteriori informazioni sui codici di escape del terminale.

modificare

Ecco alcuni altri modi per farlo ...

printf "\ec" #\e is ESC in bash
echo -en "\ec" #thanks @Jonathon Reinhart.
# -e    Enable interpretation of of backslash escapes
# -n    Do not output a new line

KDE

Quanto sopra non funziona sulla console di KDE (chiamata Konsole) ma c'è speranza! Utilizzare la seguente sequenza di comandi per cancellare lo schermo e il buffer di scorrimento indietro ...

clear && echo -en "\e[3J"

O forse usa il seguente alias su KDE ...

alias cls='clear && echo -en "\e[3J"'

Ho ricevuto il comando di cancellazione scroll-back da qui .


4
Questo è in realtà specifico del terminale. "\033c"è ESC cla sequenza di escape VT-XXX per "Ripristino completo (RIS)". Quasi tutti i terminali che le persone usano attualmente sono compatibili con VT, ma se mai ti ritrovi a utilizzare uno strano terminale, questo potrebbe non funzionare. La risposta di @ vpit3833 ha maggiori probabilità di funzionare supponendo che TERM sia impostato correttamente.
Laurence Gonsalves il

2
printfè un builtin di Bash (è vero che è anche un binario separato, ma i builtin hanno la precedenza e la maggior parte delle shell moderne ha printf).
In pausa fino a nuovo avviso.

2
@ SDX2000 OK ... So che hai specificato Ubuntu e ho pensato che si sarebbero comportati in modo simile su tutti gli emulatori di terminali "moderni". Inizialmente ho testato sul mio terminale MAC e non è stato ripristinato lì, ma è stato ripristinato sul mio Centos Linux.
Il

12
echo -en "\ 033c"
Jonathon Reinhart,

2
$ 0,02 qualche anno dopo, ma sono uno studente alla CU. Ha chiesto al mio professore di sistemi operativi e ha detto che questo era un esempio della sequenza di escape ANSI: en.wikipedia.org/wiki/ANSI_escape_code Questo è un esempio di segnalazione in banda.
Abgordon,

216

Prova reset. Cancella lo schermo del terminale ma è possibile accedere ai comandi precedenti tramite la freccia o qualsiasi associazione di tasti che si possiede.


3
Grazie! Ma cancella tutto, incluso il prompt. Vedi la mia risposta per una soluzione che non lo fa.
Autodidatta,

5
@ SDX2000 Entrambi cancellano il prompt, quindi la shell ne genera uno nuovo. L'unico svantaggio da resettare è che sembra essere un po 'più lento (probabilmente perché non si limita a emettere ESC c) ma è più portatile.
Laurence Gonsalves il

@Laurence grazie per il chiarimento ... Ho provato a resettare ma era così lento che ho pensato che il prompt fosse cancellato insieme a tutto il resto. Preferirò comunque usare ESC cpoiché probabilmente non userò mai nessun terminale diverso da quello usato da Ubuntu. Anche se resetun giorno potrò tornare utile quando eseguo il debug di una macchina remota attraverso la porta seriale, ecc.
Autodidact

1
Il ripristino di @ SDX2000 è utile anche per quei casi in cui il tuo terminale viene malamente manipolato perché hai ucciso qualcosa (o catturato un file binario) e ha lasciato il tuo termine in uno stato alterato. Sei mai entrato in uno stato in cui viene visualizzato il tuo prompt ma non durante la digitazione e quando premi Invio, il nuovo prompt viene visualizzato accanto al prompt precedente anziché al di sotto di esso? reset risolve questo. In realtà è tutto ciò per cui lo uso mai ... Non ho mai avuto bisogno / desiderio di cancellare il mio buffer di scorrimento.
Laurence Gonsalves il

4
Il ritardo di un secondo associato resetè insopportabile per me.
Jonathon Reinhart,


7

Nessuna delle risposte che ho letto ha funzionato in PuTTY, quindi ho trovato un commento su questo articolo :

Nelle impostazioni per la tua connessione, sotto "Finestra-> Comportamento" troverai un'impostazione "Il menu di sistema appare solo su ALT". Quindi CTRL + L, ALT, l (che è una L minuscola) scorrerà lo schermo e quindi azzererà il buffer di scorrimento.

(rilevante per l'OP perché mi sto collegando a un server Ubuntu, ma anche apparentemente rilevante indipendentemente dal server in esecuzione.)


Un commento di 3 anni di @Dennis Williamson mi ha portato a questa risposta.
TecBrat,

Inoltre, dato che nelle impostazioni "Finestra" di PuTTY è stata attivata la "viene visualizzato il menu di sistema a ALT-Spazio" si può rapidamente fare CTRL+L, allora ALT+Space, Uche cancella prima la finestra del terminale poi reimposta lo scrollback per davvero.
Pierre Voisin,

6

Il seguente link spiegherà come rendere permanente questo alias in modo da non dover continuare a digitarlo.

/ubuntu/17536/how-do-i-create-a-permanent-bash-alias

Questi sono i passaggi dettagliati a quel link.

  1. vim ~ / .bashrc o gedit ~ / .bashrc o qualunque altro editor di testo ti piaccia
  2. put alias cls = 'printf "\ 033c"' nella parte inferiore del file
  3. salva ed esci
  4. . ~ / .bashrc (e sì, ci dovrebbe essere uno spazio tra. e ~)
  5. ora controlla se tutto ha funzionato!

Non mi merito per queste informazioni semplicemente passandole.



4

Il mio comando amico umano preferito per questo è:

reset

Testato su xterm e VT100. Aiuta anche dopo una chiusura anomala del programma. Mantiene il buffer dei comandi, quindi la freccia su passerà attraverso i comandi precedenti.

cin cin: D


3

So che la soluzione che utilizza la stampa di nuove linee non è molto supportata, ma se tutto il resto fallisce, perché no? Soprattutto quando si opera in un ambiente in cui è probabile che qualcun altro sia in grado di vedere lo schermo, ma non sia in grado di eseguire il keylog. Una potenziale soluzione quindi è il seguente alias:

alias c="printf '\r\n%.0s' {1..50}"

Quindi, per "cancellare" il contenuto corrente dello schermo (o meglio, nasconderlo), basta digitare c+Entersul terminale.


2

Solo per aggiungere che il tmuxbuffer di scorrimento non si cancella conclear , reseto printf. È necessario :clear-history. Vedi link .


-2
echo -e "\e[3J"

Questo funziona su macchine Linux


5
Sebbene ti ringraziamo per la tua risposta, sarebbe meglio se fornisse un valore aggiuntivo rispetto alle altre risposte. In questo caso, la tua risposta non fornisce un valore aggiuntivo, poiché un altro utente ha già pubblicato quella soluzione. Se una risposta precedente ti è stata utile, dovresti votarla invece di ripetere le stesse informazioni.
Toby Speight,

-53

Compila questa app.

#include <iostream>
#include <cstring>

int main()
{
  char str[1000];
  memset(str, '\n', 999);
  str[999] = 0;
  std::cout << str << std::endl;
  return 0;
}

33
Siamo spiacenti, ma questa non è la soluzione migliore. Esistono metodi migliori rispetto
all'emissione di

2
In realtà c'è un certo valore in questo. In alcuni terminali, cancellare lo schermo con gli altri metodi ucciderà la cronologia e non ti permetterà di scorrere indietro ... anche se con 999 linee il mio dito si stancherebbe. Povero ragazzo.
JoshuaDavid,

@JoshuaDavid Il punto centrale della domanda era che OP non voleva essere in grado di tornare indietro dopo la cancellazione.
Socowi,

@Socowi Il mio commento riguardava questa risposta -50 con scarsa valutazione, non l'OP. Ma hai ragione!
JoshuaDavid,
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.