Como realmente limpar o terminal?

385

Eu posso emitir o clearcomando ou pressionar Ctrl+ Lpara limpar o terminal atual do Ubuntu, mas isso apenas muda a saída anterior para cima e, se você usar o mouse ou as teclas PgUPe PgDown, é difícil distinguir onde a saída do comando anterior termina e a saída do comando atual começa.

Existe uma maneira de realmente limpar o terminal para que eu não veja os resultados dos comandos anteriores?

Stann
fonte
11
Pressione Ctrl + L duas vezes e você fica em branco!
30814 Pandya

Respostas:

456

Sim, o comando que você está procurando é

reset

Ao contrário de clear, ou Ctrl+ L, resetrealmente reinicializará completamente o terminal , em vez de apenas limpar a tela. No entanto, ele não irá instanciar novamente o shell (bash). Isso significa que o estado do bash é o mesmo de antes, como se você estivesse apenas limpando a tela.

Como o @Wallacoloo menciona nos comentários, este comando deve fazer a mesma coisa mais rapidamente:

tput reset

Das outras respostas:

  • Você pode definir um atalho de teclado para reseto terminal, conforme explicado por towolf .

  • Se você estiver executando o Kubuntu , e seu terminal for o Konsole, precisará ir em Editar → Limpar histórico , pois resetnão funciona da mesma maneira, como observa o UncleZeiv .

Stefano Palazzo
fonte
9
Provavelmente não importa para a maioria dos usuários, mas o comportamento de resetdepende do terminal.
Cthom06 7/02
2
Pessoalmente, não me importo que algo seja deixado "para cima" ao longo do scroller quando bato ^L. Eu não o vejo (é isso que eu quero!), Não o sinto e, de repente, eu precisaria restaurar o que estava lá - não há problema. resetem contraste, é uma ferramenta muito mais difícil - eu a usarei quando algo der errado com o terminal - como quando seqüências de escape estranhas acidentalmente arruinam a tela completamente.
7117 ulidtko
14
@ulidtko: importa quando você executa sessões consecutivas de programas com toneladas de saída. Se você voltar, é fácil ficar confuso sobre qual execução imprimiu alguma coisa. Sei perfeitamente bem que soluções mais sofisticadas poderiam ser usadas nesses casos, mas, mesmo assim, é um cenário que ocorre com bastante frequência em sessões de depuração rápidas e sujas.
UncleZeiv
7
Há também o tput resetque faz visivelmente a mesma coisa, mas é concluído instantaneamente (enquanto isso resetpode levar até 2 segundos antes que o prompt reapareça).
Ponkadoodle
1
Isso faz com que minha janela putty.exe seja redimensionada, seria bom limpar sem que isso acontecesse.
precisa saber é o seguinte
100

Eu estava procurando por isso por um tempo e encontrei um gênio que postou isso:

clear && printf '\e[3J'

Limpa todo o buffer da tela, muito limpo. Funciona no OS X e acredita que funciona bem na maioria dos terminais * nix.

Para curiosidade, esta parte '\e[3J'é um comando de escape do terminal.

Goran
fonte
2
Hmm, trabalha em xterm, o Konsole e Linux VT, mas não no gnome-terminal ...
Ruslan
1
Obrigado, funciona muito bem no meu Mac - eu realmente senti falta do estilo Bash real reset.
21815 JohnnyCoder
9
Obrigado, isso é super útil! O que printf '\e[3J'significa isso ? Como ele limpa o buffer?
Filip Spiridonov
4
tome cuidado com o aliasing reset- ele faz mais do que apenas limpar o terminal. por exemplo, se você imprimir acidentalmente um arquivo binário com lixo aleatório que corrompe o terminal (por exemplo, desativa o eco de caracteres digitados), resetgeralmente é possível corrigir isso. é claro que o alias é bom, desde que você saiba como \overrideum comando com sombra de alias.
RubyTuesdayDONO
4
Esta é a única resposta que funciona para limpar o retorno de Putty ao acessar um SSH via Winders.
precisa saber é o seguinte
45

Você também pode atribuir um atalho no gnome-terminal, indo em Editar → Atalhos do teclado . Eu uso Shift+ Ctrl+ Alt+ C.

redefinir e limpar atalho

towolf
fonte
+1. Eu sempre tenho a barra de menus oculta; mesmo depois de anos e anos usando o gnome, nunca pensei em procurar por isso. Obrigado :-)
Stefano Palazzo
3
"Redefinir" não faz nada por mim e "Redefinir e limpar" limpa tudo, mas não exibe novamente o prompt. Nenhuma dessas entradas de menu se comporta como o comando "reset" de um terminal.
precisa
Como @ Hibou57 disse, meu atalho de teclado para "Reset" parece não fazer nada. Essa funcionalidade está quebrada no 14.04?
Michael Martin-Smucker
“Esta funcionalidade está quebrada no 14.04?”: É o mesmo com o 12.04.
precisa saber é o seguinte
1
@ Hibou57 "Reset and Clear" não deve exibir novamente o prompt, mas se você pressionar Enter depois, ele deverá exibir novamente o prompt. Isso funciona para você?
Don escotilha
19

Postando minha resposta em stackoverflow .

Use o comando a seguir para fazer uma tela limpa em vez de simplesmente adicionar novas linhas ...

printf "\033c"

sim, isso é um 'printf' no prompt do bash.

Você provavelmente desejará definir um alias embora ...

alias cls='printf "\033c"'

Explicação

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

Portanto, esse <ESC>cé o código de escape do VT100 para redefinir o terminal. Aqui estão mais algumas informações sobre códigos de escape do terminal.

Editar

Aqui estão algumas outras maneiras de fazer isso ...

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

O exemplo acima não funciona no console do KDE (chamado Konsole), mas há esperança! Use a seguinte sequência de comandos para limpar a tela e o buffer de rolagem para trás ...

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

Ou talvez use o seguinte apelido no KDE ...

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

Eu recebi o comando de retroceder daqui .

Autodidata
fonte
18

execute este comando:

reset

Isso tem o mesmo efeito que o lançamento de um novo terminal.

dv3500ea
fonte
6
Ao usar a massa, depois de executar reset, ainda posso rolar para cima e ver as coisas anteriores. Isso é um problema com o PuTTY reset?
Svish
@svish - isso é apenas uma questão ou decisão de implementação de massa de vidraceiro.
22711 belacqua
@jgbelacqua, Deal :)
Svish
Trabalhou com o MAC OS Terminal
Bira
2
@Bira Não, resetnão limpa a rolagem no macOS 10.14 Mojave. Você pode tentar seq 100; resetver a rolagem ainda lá. No terminal macOS, Cmd+Kpode limpar a tela e retroceder.
Johnny Wong
8

O meu favorito é printf "\ec". Isso também pode ser printf "\033c"ou printf "\x1bc". Essa é uma sequência de escape ansi que milagrosamente limpa a tela e o buffer da saída do terminal (para a maioria dos terminais padrão em que trabalhei, parece - eu sei que funciona em gnome-terminal, terminator, xterm etc. no Ubuntu Linux)

Eu sei que isso funciona no Linux Mint e no Ubuntu 14.04, então não sei por que as pessoas estão adicionando e preparando coisas como essa clear && echo -ne "\033c. printf "\ec"sempre funcionou para mim.

Além disso, no meu .bashrceu tenho uma ligação como esta:

bind -x '"\C-t": printf "\ec"';

Agora eu pressiono ctrlto tempo todo.

dylnmc
fonte
Você sabe como um mapeamento pode ser criado usando a chave do Windows? Esse trecho é realmente ótimo, funciona exatamente como o Command-K no mac. Obrigado.
Niloct
@ Hiloct, você pode ver se o terminal suporta xev(basta digitar xevum terminal dentro de uma sessão x). Pelo que pude perceber, o urxvt não suporta; enquanto eu não tentei em um tty, estou confiante de que não seria suportado. Eu também duvido que o xterm ou o gnome-terminal suportem isso. É complicado com escapes ansi. Felicidades e desculpe pela resposta tardia.
21417 dylnmc
Tudo bem @dylnmc, eu aprecio isso. Obrigado pelo comentário.
Niloct 3/02
5

Bem, isso realmente depende, se você estiver usando, Konsolepor exemplo, nem mesmo reseto impede de rolar a primeira linha. Nesse caso, você precisa usar algum recurso do terminal específico que está usando. Pois Konsoleé Edit > Clear History.

UncleZeiv
fonte
3

Eu descobri o seguinte com bastante sucesso no Kubuntu:

alias clc="echo -en '\033c\033[3J'"

Você pode usar clspara manter a tradição do Windows, usar a versão do Matlab clcou uma de sua preferência. Boa sorte!

Charles Bell
fonte
2

Outra alternativa para a resposta @ Hibou57:

# The Octal Way
alias clear="echo -e '\033c\c'"

OU

# The Hex Way
alias clear="echo -e '\x1b\c'"

Basicamente, isso terá exatamente o mesmo efeito, imprimirá o ^[caractere (que limpa o seu terminal) e não gera a nova linha à direita.

TwystO
fonte
Correção ligeira: ele imprime o ^[caráter (ESC) seguido pelo cpersonagem, não apenas o ^[caráter sozinho. Combinados, esses valores correspondem ao código do terminal "RIS", o que causa uma redefinição. Mais informações: xfree86.org/4.8.0/ctlseqs.html
jwd 11/11