Come cancellare l'output precedente in Terminale in Mac OS X?


524

Conosco il clearcomando che "cancella" la schermata corrente, ma lo fa semplicemente stampando molte nuove righe: i contenuti cancellati vengono semplicemente fatti scorrere verso l'alto.

C'è un modo per cancellare completamente tutto l'output precedente dal terminale in modo che non riesca a raggiungerlo anche scorrendo verso l'alto?


1
Hai mai trovato un modo per farlo che funzioni in uno script di shell?
Zev Eisenberg,

7
@ZevEisenberg Non credo. Comunque, ora penso di non averne bisogno affatto. Sono soddisfatto Command+K.
Eonil

@ZevEisenberg la mia risposta aggiornata (e un'altra risposta) ti mostra come farlo da uno script.
Alok Singhal,

Risposte:


1101

Per cancellare manualmente il terminale:

+K

Command+ Kper tastiere più recenti

Per cancellare il terminale da uno script di 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 potrebbe farlo? Se lo fa, per favore fatemi sapere!
Alok Singhal,

Bene, sì, ma vedi sotto ( stackoverflow.com/a/26615036/558639 ) per un modo completamente migliore.
fearless_fool,

9
Se si preme accidentalmente questo, come si farebbe per visualizzare il buffer cancellato?
Joshua Pinter

4
@JoshPinter, non premerlo per caso. :) (Prendi in considerazione l'utilizzo clearper tutti i casi tranne dove è necessario che la cronologia di scorrimento scompaia effettivamente, ad esempio quando hai intenzione di stampare.)
Wildcard

2
@Wildcard Abbastanza giusto. :) Un buon consiglio sull'uso clear. Sento che dovrebbero essere invertiti, però. Digitare clearsembra più intenzionale che colpire Command + K.
Joshua Pinter

85

Un modo migliore per cancellare lo schermo dall'interno di uno script ...

Se stai utilizzando l'app OSX Terminal (come indicato dall'OP), un approccio migliore (grazie a https://apple.stackexchange.com/a/113168 ) è proprio questo:

clear && printf '\e[3J'

o più concisamente (punta del cappello su https://stackoverflow.com/users/4834046/qiuyi ):

printf '\33c\e[3J'

che cancella il buffer di scrollback e lo schermo. Ci sono anche altre opzioni, vedi https://apple.stackexchange.com/a/113168 per maggiori informazioni.

risposta originale

La risposta AppleScript fornita in questo thread funziona, MA ha il brutto effetto collaterale di cancellare QUALSIASI finestra del terminale che sembra essere attiva. Questo è sorprendente se stai eseguendo lo script in una finestra e stai cercando di completare il lavoro in un'altra!

Per evitare ciò, perfeziona AppleScript per cancellare lo schermo solo se è in primo piano in questo modo (preso da https://apple.stackexchange.com/a/31887 ):

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

... ma come quando non è la finestra corrente, l'output si accumulerà fino a quando non diventa di nuovo corrente, che probabilmente non è quello che vuoi.


1
Ho usato il "modo migliore" .bash_profileed è fantastico perché non riesco più a ottenere il buffer glitch a volte quando apro una nuova finestra del terminale.
Patrick Roberts,

1
Questa è la risposta concettualmente più corretta. La risposta di qiuyi evita il && al sacrificio di un po 'di leggibilità. Se la risposta di Alok potesse essere estesa per cancellare il terminale che sta eseguendo lo script corrente, sarebbe un miglioramento, ma questo sarebbe più semplice.
Zack Morris,

1
Questo è waaaaaaaaaaay meglio per lo scripting. Grazie mille!
Andy,

Questo è perfetto per quando sei su un altro sistema, grazie!
JBR Wilkinson,

48

Il modo carino è printf '\33c\e[3J'


3
Questo è il modo migliore Dovremmo definire un alias comealias cls='printf "\33c\e[3J"'
mpyw,

Grazie, questo è esattamente ciò di cui avevo bisogno.
GigaBass,

Funziona anche su iTerm2
Anders Zommarin,

1
@ LoïcFaure-Lacroix, \33cesegue l'equivalente del clearcomando, che in pratica fa semplicemente scorrere lo schermo fino a quando non riesci a vedere i contenuti precedenti. Cancella lo schermo, ma non il buffer di scorrimento indietro (cioè è ancora possibile utilizzare le barre di scorrimento per vedere il vecchio output). Aggiungere il \e[3Jper cancellare effettivamente il buffer di scorrimento indietro.
luiss,

@EirNym, aggiungi function cls { printf '\33c\e[3J\33c' }linea in ~/.profile(o a livello di sistema /etc/profile). Questo dovrebbe funzionare per ambienti desktop in macOS, FreeBSD, Linux ecc. Nota che l'ulteriore \33cè per cancellare il valore \e[3Jletterale extra in non macOS (in pratica per Linux / FreeBSD, abbiamo solo bisogno printf '\33c').
corvo vulcaniano

33

Inseriscilo nel tuo .bash_profile o .bashrc

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

Questa dovrebbe essere la risposta corretta. AppleScript potrebbe essere disordinato, ma hey, fa il lavoro. Grazie.
allanberry,

Aveva votato, ma un'altra risposta nota che questo cancella tutte le finestre!
Michael Bushe,

20

Su Mac OS X Terminal questa funzionalità è già integrata nell'applicazione Terminal come View->Clear Scrollback(L'impostazione predefinita è CMD+ K).

Quindi puoi riassegnarlo come preferisci con le scorciatoie da tastiera di Apple. Basta aggiungere un nuovo collegamento per Terminale con il comando "Cancella scorrimento". (Uso CMD+ L, perché è simile a CTRL+ Lper cancellare il contenuto della schermata corrente, senza cancellare il buffer.)

Non sono sicuro di come lo useresti in uno script (forse AppleScript come altri hanno sottolineato).


1
A partire da Yosemite (10.10), View->Clear Scrollbacknon è più presente nel menu di Terminal. La scorciatoia da tastiera CMD+ Kfunziona comunque, comunque.
Nicolas Miari,

1
@NicolasMiari Sembra che Clear Scrollbacksia appena passato da Viewa EditYosemite.
BrainSteel,

10

Con Mac OS X Yosemite (10.10) usare Option + Command + Kper cancellare lo scrollback in Terminal.app.


9

Oppure puoi inviare un'interruzione di pagina (feed modulo ASCII) premendo:

CTRL+L

Mentre questo tecnicamente avvia solo una nuova pagina, questo ha lo stesso effetto netto di tutti gli altri metodi, pur essendo molto più veloce (ad eccezione della soluzione Apple + K, ovviamente).

E poiché si tratta di un comando di controllo ASCII, funziona in tutte le shell.


1
Ciò cancella lo schermo ma lascia intatto il buffer di scorrimento.
George,

non è lo stesso se vuoi usare cmd + f per esempio
bormat,

7

Per eliminare solo l'ultimo output:

+L

Per cancellare completamente il terminale:

+K


6

Comando + K cancellerà l'output precedente

Per cancellare il testo inserito, prima salta a sinistra con " Comando + A ", quindi cancella il testo a destra del puntatore con " Control + K ".

Esempi visivi: inserisci qui la descrizione dell'immagine



5

Fai la cosa giusta, fai la cosa giusta!

Cancella al segno precedente:Command-L

Cancella al segnalibro precedente:Option-Command-L

Cancella per iniziare: Command-K

Aiuta i tuoi ragazzi!


1

Non sono riuscito a far funzionare nessuna delle opzioni precedenti (su macOS).

Una combinazione ha funzionato per me -

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

Questo cancella il buffer e lo schermo


Che cos'è IO.write? Ho dovuto sostituirlo con printf per farlo funzionare. Grazie comunque. Questo funziona meglio per me
Fitsyu,

1
Non sono sicuro del motivo per cui ho scelto IO.write. Dovrebbe funzionare lo stesso, tuttavia si decide di stampare quei caratteri sul terminale.
Michael Baldry,

1

Digitando quanto segue nel terminale si cancellerà la cronologia (il che significa che usare la freccia su non ti farà ottenere nulla) - ma non cancellerà lo schermo:

history -c

Lo fa. @phil li elimina in modo permanente dal disco o sono ancora recuperabili in qualche modo?
Steven Roose,

Fondamentalmente elimina il file ~ / .bash_history, quindi se riesci a recuperarlo, puoi recuperare i comandi che sono stati cancellati
Ryan Pendleton,

No non funziona. La cronologia con scorrimento esiste ancora e posso scorrere verso l'alto per vederli di nuovo.
Eonil,

27
Non quello che è stato chiesto. Questo cancella la storia, non l'attuale buffer, che sono due cose molto diverse.
Sean Cameron,

1
Non quello che è stato chiesto e dannoso ; Sono stato morso da questo, e la mia storia conteneva cose importanti.
Elazar,

0

Prova questo, se sei sopraffatto dall'output se vuoi un filtro

adb -d shell dumpsys attività | grep ActivityRecord


-4

CMD + K sembra funzionare tutto il tempo per me.


2
Questa è la stessa risposta di quella accettata scritta 8 anni fa.
Piksel Bitworks,
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.