Comment effacer la sortie précédente dans Terminal sous Mac OS X?

524

Je connais la clearcommande qui «efface» l'écran actuel, mais elle le fait simplement en imprimant beaucoup de nouvelles lignes - le contenu effacé est simplement défilé vers le haut.

Existe-t-il un moyen d'effacer complètement toutes les sorties précédentes du terminal afin que je ne puisse pas y accéder même en faisant défiler vers le haut?

Eonil
la source
1
Avez-vous déjà trouvé un moyen de faire cela qui fonctionne dans un script shell?
Zev Eisenberg
7
@ZevEisenberg Je ne pense pas. De toute façon, maintenant je pense que je n'en ai pas du tout besoin. J'en suis satisfait Command+K.
Eonil
@ZevEisenberg ma réponse mise à jour (et une autre réponse) vous montre comment le faire à partir d'un script.
Alok Singhal

Réponses:

1101

Pour effacer le terminal manuellement:

+K

Command+ Kpour les claviers plus récents

Pour effacer le terminal d'un script shell;

/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'
Alok Singhal
la source
@fearless_fool apple.stackexchange.com/a/31887 pourrait le faire? Si c'est le cas, faites-le moi savoir!
Alok Singhal
Eh bien, oui, mais voir ci-dessous ( stackoverflow.com/a/26615036/558639 ) pour une meilleure méthode.
fearless_fool
9
Si vous avez accidentellement appuyé sur cette touche, comment procéder pour afficher le tampon effacé?
Joshua Pinter
4
@JoshPinter, n'appuyez pas dessus par accident. :) (Pensez à utiliser clearpour tous les cas, sauf lorsque vous avez besoin que l'historique de défilement disparaisse, par exemple lorsque vous allez imprimer.)
Wildcard
2
@Wildcard Assez juste. :) Bon conseil d'utilisation clear. Je pense cependant qu'ils devraient être inversés. Taper clearsemble plus intentionnel que frapper Command + K.
Joshua Pinter
85

Une meilleure façon d'effacer l'écran de l'intérieur d'un script ...

Si vous utilisez l'application OSX Terminal (comme indiqué par l'OP), une meilleure approche (grâce à https://apple.stackexchange.com/a/113168 ) est simplement la suivante:

clear && printf '\e[3J'

ou plus concis (pointe du chapeau sur https://stackoverflow.com/users/4834046/qiuyi ):

printf '\33c\e[3J'

qui efface le tampon de défilement ainsi que l'écran. Il existe également d'autres options, voir https://apple.stackexchange.com/a/113168 pour plus d'informations.

réponse originale

La réponse AppleScript donnée dans ce fil fonctionne, MAIS elle a l'effet secondaire désagréable d'effacer TOUTE fenêtre de terminal qui se trouve être active. C'est surprenant si vous exécutez le script dans une fenêtre et essayez de faire le travail dans une autre!

Vous évitez cela en affinant l'AppleScript pour effacer l'écran uniquement s'il est au premier plan en faisant cela (extrait de https://apple.stackexchange.com/a/31887 ):

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

... mais comme quand ce n'est pas la fenêtre courante, la sortie s'empilera jusqu'à ce qu'elle redevienne courante, ce qui n'est probablement pas ce que vous voulez.

intrépide_fool
la source
1
J'ai utilisé la "meilleure façon" .bash_profileet c'est génial car je n'obtiens plus le tampon glitch parfois lors de l'ouverture d'une nouvelle fenêtre de terminal.
Patrick Roberts
1
C'est la réponse la plus conceptuellement correcte. La réponse de qiuyi évite le && au prix d'un peu de lisibilité. Si la réponse d'Alok pouvait être étendue pour effacer le terminal qui exécute le script actuel, ce serait une amélioration, mais c'est plus simple.
Zack Morris
1
C'est waaaaaaaaaaay mieux pour les scripts. Merci beaucoup!
Andy
C'est parfait lorsque vous êtes connecté à un autre système, merci!
JBRWilkinson
48

La jolie façon est printf '\33c\e[3J'

qiuyi
la source
3
C'est la meilleur façon. Nous devrions définir un alias commealias cls='printf "\33c\e[3J"'
mpyw
Merci, c'est exactement ce dont j'avais besoin.
GigaBass
Fonctionne également dans iTerm2
Anders Zommarin
1
@ LoïcFaure-Lacroix, \33cexécute l'équivalent de la clearcommande, qui fait simplement défiler l'écran jusqu'à ce que vous ne puissiez pas voir son contenu précédent. Il efface l'écran, mais pas le tampon de défilement arrière (c'est-à-dire que vous pouvez toujours utiliser les barres de défilement pour voir l'ancienne sortie). Ajoutez le \e[3Jpour effacer le tampon de défilement.
luiss
@EirNym, ajoutez une function cls { printf '\33c\e[3J\33c' }ligne ~/.profile(ou à l'échelle du système /etc/profile). Cela devrait fonctionner pour les environnements de bureau sous macOS, FreeBSD, Linux etc. Notez que le supplément \33cest pour effacer le \e[3Jlittéral supplémentaire dans non-macOS (essentiellement pour Linux / FreeBSD, nous avons seulement besoin printf '\33c').
vulcan raven
33

Mettez ceci dans votre .bash_profile ou .bashrc

function cls { 
osascript -e 'tell application "System Events" to keystroke "k" using command down' 
}
Robert Simmons Jr.
la source
Ce devrait être la bonne réponse. AppleScript peut être désordonné, mais bon, fait le travail. Merci.
allanberry
Avait voté, mais une autre réponse note que cela efface toutes les fenêtres!
Michael Bushe
20

Sur Mac OS X Terminal, cette fonctionnalité est déjà intégrée à l'application Terminal comme View->Clear Scrollback(la valeur par défaut est CMD+ K).

Vous pouvez donc réaffecter cela à votre guise avec les raccourcis clavier d'Apple. Ajoutez simplement un nouveau raccourci pour Terminal avec la commande "Clear Scrollback". (J'utilise CMD+ L, car il est similaire à CTRL+ Lpour effacer le contenu de l'écran actuel, sans effacer le tampon.)

Je ne sais pas comment vous utiliseriez cela dans un script (peut-être AppleScript comme d'autres l'ont souligné).

Bord de mer
la source
1
Depuis Yosemite (10.10), View->Clear Scrollbackn'est plus présent dans le menu du Terminal. Cependant, le raccourci clavier CMD+ Kfonctionne toujours.
Nicolas Miari
1
@NicolasMiari On dirait que Clear Scrollbackvient de passer de Viewà EditYosemite.
BrainSteel
10

Avec Mac OS X Yosemite (10.10), utilisez Option + Command + Kpour effacer le défilement dans Terminal.app.

David J.
la source
9

Ou vous pouvez envoyer un saut de page (flux de formulaire ASCII) en appuyant sur:

CTRL+L

Bien que cela ne démarre techniquement qu'une nouvelle page, cela a le même effet net que toutes les autres méthodes, tout en étant beaucoup plus rapide (sauf pour la solution Apple + K, bien sûr).

Et comme il s'agit d'une commande de contrôle ASCII, elle fonctionne dans tous les shells.

user2897962
la source
1
Cela efface l'écran mais laisse le tampon de défilement intact.
George
ce n'est pas pareil si vous voulez utiliser cmd + f par exemple
bormat
7

Pour supprimer uniquement la dernière sortie:

+L

Pour effacer complètement le terminal:

+K

Aman Jain
la source
6

Commande + K effacera la sortie précédente

Pour effacer le texte saisi, sautez d'abord à gauche avec " Commande + A " puis effacez le texte à droite du pointeur avec " Contrôle + K" ".

Exemples visuels: entrez la description de l'image ici

Punnerud
la source
5
clear && printf '\e[3J'

efface tout, fonctionne bien sur osX également. très propre

jeevjyot singh chhabda
la source
5

Faites la bonne chose, faites la bonne chose!

Effacer la marque précédente:Command-L

Effacer le signet précédent:Option-Command-L

Clair pour commencer: Command-K

Aidez vos gars!

McAllister Bowman
la source
1

Je n'ai pu faire fonctionner aucun des éléments ci-dessus (sur macOS).

Une combinaison a fonctionné pour moi -

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

Cela efface le tampon et l'écran

Michael Baldry
la source
Qu'est-ce que IO.write? J'ai dû le remplacer par printf pour le faire fonctionner. Merci quand même. Celui-ci fonctionne le mieux pour moi
Fitsyu
1
Je ne sais pas pourquoi j'ai choisi IO.write. Cela devrait fonctionner de la même manière, mais vous décidez d'imprimer ces caractères sur le terminal.
Michael Baldry
1

Taper ce qui suit dans le terminal effacera votre historique (ce qui signifie que l'utilisation de la flèche vers le haut ne vous apportera rien) - mais n'effacera pas l'écran:

history -c
phil
la source
Cela fait. @phil les supprime-t-il définitivement du disque, ou sont-ils toujours récupérables d'une manière ou d'une autre?
Steven Roose
Fondamentalement, il supprime le fichier ~ / .bash_history, donc si vous pouvez récupérer cela, vous pouvez récupérer les commandes qui ont été effacées
Ryan Pendleton
Non ça ne marche pas. L'historique de défilement existe toujours, et je peux faire défiler pour les revoir.
Eonil
27
Pas ce qui a été demandé. Cela efface l'historique, pas le tampon actuel, qui sont deux choses très différentes.
Sean Cameron
1
Pas ce qui a été demandé et nuisible ; J'étais juste mordu par cela, et mon histoire contenait des choses importantes.
Elazar
0

Essayez ceci, si vous êtes submergé par la sortie si vous voulez un filtre

Activité de adb -d shell dumpsys | grep ActivityRecord

sreekumar
la source
-4

CMD + K semble fonctionner tout le temps pour moi.

CoeB
la source
2
C'est la même réponse que celle acceptée il y a 8 ans.
piksel bitworks