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

Je connais la commande clear qui «efface» l’écran en cours, mais elle le fait simplement en imprimant beaucoup de nouvelles lignes – le contenu effacé est simplement fait défiler vers le haut.

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

Pour effacer le terminal manuellement:

K + K

Commande + K pour les nouveaux claviers

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' 

Une meilleure façon …

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

 clear && printf '\e[3J' 

qui efface le tampon de défilement. Et c’est plus rapide que d’exécuter AppleScript. 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 de discussion fonctionne, MAIS elle a un effet secondaire désastreux, à savoir la suppression de toute fenêtre de terminal active. Cela 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 le script AppleScript pour ne supprimer l’écran que s’il se trouve au premier plan (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 actuelle, la sortie s’emstackra jusqu’à ce qu’elle redevienne courante, ce qui n’est probablement pas ce que vous voulez.

La jolie manière est printf '\33c\e[3J'

Mettez ceci dans votre fichier .bash_profile ou .bashrc

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

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

Vous pouvez donc ré-assigner ceci comme vous le souhaitez 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 + L pour effacer le contenu actuel de l’écran, sans effacer le tampon.)

Vous ne savez pas comment l’utiliser dans un script (peut-être AppleScript comme d’autres l’ont fait remarquer).

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

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

 CTRL+L 

Bien que cela ne fasse que démarrer techniquement une nouvelle page, cela a le même effet net que toutes les autres méthodes, tout en étant beaucoup plus rapide (à l’exception de la solution Apple + K, bien sûr).

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

 clear && printf '\e[3J' 

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

En tapant ce qui suit dans le terminal, vous effacerez votre historique (ce qui signifie que l’utilisation de la flèche vers le haut ne vous donnera rien) – mais n’effacera pas l’écran:

 history -c 

Je n’ai pu obtenir aucun de ces éléments pour travailler (sur MacOS).

Une combinaison a fonctionné pour moi –

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

Cela efface le tampon et l’écran

CMD + K semble travailler tout le temps pour moi.