Como limpar a saída anterior no Terminal no Mac OS X?


523

Conheço o clearcomando que 'limpa' a tela atual, mas faz isso apenas imprimindo muitas linhas novas - o conteúdo limpo apenas é rolado para cima.

Existe uma maneira de limpar completamente toda a saída anterior do terminal para que eu não possa alcançá-la, mesmo rolando para cima?


1
Você já encontrou uma maneira de fazer isso que funcione em um shell script?
Zev Eisenberg 8/14

7
@ZevEisenberg Acho que não. Enfim, agora acho que não preciso disso. Estou satisfeito com Command+K.
Eonil

@ZevEisenberg minha resposta atualizada (e outra resposta) mostra como fazer isso a partir de um script.
Alok Singhal

Respostas:


1100

Para limpar o terminal manualmente:

+K

Command+ Kpara teclados mais recentes

Para limpar o terminal de dentro de um script de shell;

/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'

@fearless_fool apple.stackexchange.com/a/31887 pode fazê-lo? Se isso acontecer, por favor me avise!
Alok Singhal

Bem, sim, mas veja abaixo ( stackoverflow.com/a/26615036/558639 ) para uma maneira melhor.
Fearless_fool

9
Se você acidentalmente pressionasse isso, como seria a visualização do buffer limpo?
Joshua Pinter

4
@ Joshinter, apenas não pressione por acidente. :) (Considere o uso clearpara todos os casos , exceto onde você precisa a história scrollback para realmente desaparecer, por exemplo, quando você está indo para imprimir.)
Wildcard

2
@ Faircard Fair o suficiente. :) Bons conselhos sobre o uso clear. Eu sinto que eles deveriam ser revertidos, no entanto. Digitar clearparece mais intencional do que bater Command + K.
Joshua Pinter

85

Uma maneira melhor de limpar a tela de dentro de um script ...

Se você estiver usando o aplicativo OSX Terminal (conforme declarado pelo OP), uma abordagem melhor (graças a https://apple.stackexchange.com/a/113168 ) é exatamente isso:

clear && printf '\e[3J'

ou mais concisamente (dica para https://stackoverflow.com/users/4834046/qiuyi ):

printf '\33c\e[3J'

que limpa o buffer de rolagem e a tela. Também existem outras opções, consulte https://apple.stackexchange.com/a/113168 para obter mais informações.

resposta original

A resposta AppleScript dada neste segmento funciona, mas tem o efeito colateral desagradável de limpar QUALQUER janela do terminal que esteja ativa. Isso é surpreendente se você estiver executando o script em uma janela e tentando concluir o trabalho em outra!

Você evita isso refinando o AppleScript para limpar a tela apenas se estiver na frente, fazendo isso (obtido em https://apple.stackexchange.com/a/31887 ):

osascript -e 'if application "Terminal" is frontmost then tell application "System Events" to keystroke "k" using command down'

... mas como quando não é a janela atual, a saída se empilha até que se torne atual novamente, o que provavelmente não é o que você deseja.


1
Eu usei o "caminho melhor" .bash_profilee é incrível, porque às vezes não recebo o buffer com falha ao abrir uma nova janela do terminal.
Patrick Roberts

1
Esta é a resposta mais conceitualmente correta. A resposta de qiuyi evita o && no sacrifício de um pouco de legibilidade. Se a resposta de Alok pudesse ser estendida para limpar o terminal que está executando o script atual, seria uma melhoria, mas isso é mais simples.
Zack Morris

1
Isso é waaaaaaaaaaay melhor para scripts. Muito obrigado!
21316 Andy

Isso é perfeito para quando você é transferido para outro sistema, obrigado!
JBWilkinson

48

O jeito bonito é printf '\33c\e[3J'


3
Esta é a melhor maneira. Devemos definir alias comoalias cls='printf "\33c\e[3J"'
mpyw 27/04/2015

Obrigado, é exatamente isso que eu precisava.
precisa saber é o seguinte

Trabalha em iTerm2 bem
Anders Zommarin

1
@ LoïcFaure-Lacroix, \33cexecuta o equivalente ao clearcomando, que basicamente apenas rola a tela até que você não consiga ver o conteúdo anterior. Ele limpa a tela, mas não o buffer de rolagem para trás (ou seja, você ainda pode usar as barras de rolagem para ver a saída antiga). Adicione o \e[3Jpara realmente limpar o buffer de rolagem para trás.
luiss 19/09/17

@EirNym, adicione function cls { printf '\33c\e[3J\33c' }linha ~/.profile(ou em todo o sistema /etc/profile). Isso deve funcionar em ambientes de desktop no macOS, FreeBSD, Linux etc. Observe que o extra \33cé para limpar o \e[3Jliteral extra no não-macOS (basicamente para Linux / FreeBSD, precisamos apenas printf '\33c').
corvo vulcan

33

Coloque isso no seu .bash_profile ou .bashrc

function cls { 
osascript -e 'tell application "System Events" to keystroke "k" using command down' 
}

Essa deve ser a resposta correta. AppleScript pode ser confuso, mas, ei, faz o trabalho. Obrigado.
allanberry

Tinha votado, mas outra resposta observa que isso limpa todas as janelas!
Michael Bushe

20

No Mac OS X Terminal, essa funcionalidade já está incorporada ao Aplicativo de Terminal como View->Clear Scrollback(o padrão é CMD+ K).

Assim, você pode redesigná-lo como quiser com os atalhos de teclado da Apple. Basta adicionar um novo atalho para o Terminal com o comando "Clear Scrollback". (Uso CMD+ L, porque é semelhante a CTRL+ Lpara limpar o conteúdo da tela atual, sem limpar o buffer.)

Não tenho certeza de como você usaria isso em um script (talvez AppleScript, como outros já apontaram).


1
A partir de Yosemite (10.10), View->Clear Scrollbacknão está mais presente no menu do Terminal. O atalho de teclado CMD+ Kainda funciona, no entanto.
Nicolas Miari 28/09/2015

1
@NicolasMiari Parece que Clear Scrollbackacabou de passar de Viewpara EditYosemite.
BrainSteel

10

Com o Mac OS X Yosemite (10.10), use Option + Command + Kpara limpar a rolagem no Terminal.app.


9

Ou você pode enviar uma quebra de página (feed de formulário ASCII) pressionando:

CTRL+L

Enquanto isso tecnicamente apenas inicia uma nova página, isso tem o mesmo efeito líquido que todos os outros métodos, embora seja muito mais rápido (exceto para a solução Apple + K, é claro).

E porque este é um comando de controle ASCII, ele funciona em todos os shells.


1
Isso limpa a tela, mas deixa o buffer de rolagem intacto.
George George

não é o mesmo, se você quiser usar cmd + f para exemple
bormat

7

Para excluir apenas a última saída:

+L

Para limpar o terminal completamente:

+K


6

Command + K limpa a saída anterior

Para limpar o texto digitado, primeiro pule para a esquerda com " Command + A " e depois apague o texto à direita do ponteiro com " Control + K ".

Exemplos visuais: insira a descrição da imagem aqui



5

Faça a coisa certa, faça a coisa certa!

Limpar para a marca anterior:Command-L

Limpar para o marcador anterior:Option-Command-L

Limpar para começar: Command-K

Ajude seus rapazes!


1

Não consegui fazer com que nenhum dos itens acima funcione (no macOS).

Uma combinação funcionou para mim -

IO.write "\e[H\e[2J\e[3J"

Isso limpa o buffer e a tela


O que é o IO.write? Eu tive que substituí-lo por printf para fazê-lo funcionar. Obrigado mesmo assim. Este funciona melhor para mim
Fitsyu

1
Não sei por que escolhi IO.write. Deve funcionar da mesma maneira, mas você decide imprimir esses caracteres no terminal.
Michael Baldry

1

Digitando o seguinte no terminal irá apagar seu histórico (ou seja, usando a seta para cima vai te dar nada) - mas não vai limpar a tela:

history -c

Faz. @phil os exclui permanentemente do disco ou eles ainda podem ser recuperados de alguma forma?
Steven Roose

Basicamente, ele exclui o arquivo ~ / .bash_history, por isso, se você pode recuperar isso, você pode recuperar os comandos que foram desmatadas
Ryan Pendleton

Não, não funciona. O histórico rolado para cima ainda existe, e eu posso rolar para cima para vê-los novamente.
Eonil

26
Não foi o que foi perguntado. Isso limpa o histórico, não o buffer atual, que são duas coisas muito diferentes.
Sean Cameron

1
Não é o que foi pedido e prejudicial ; Fui mordido por isso e minha história continha coisas importantes.
Elazar

0

Tente isso, se você estiver sobrecarregado com a saída, se quiser um filtro

atividade de db do shell adb -d | grep ActivityRecord


-4

CMD + K parece funcionar o tempo todo para mim.


2
Esta é a mesma resposta que a aceita, escrita há 8 anos.
piksel bitworks
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.