Effacer un écran de terminal pour de vrai

382

L'utilisation de la clearcommande sur le terminal ne fait que tromper l'utilisateur en pensant que l'écran a été effacé ... vous pouvez toujours voir la sortie des commandes précédentes lorsque vous faites défiler à l'aide de la souris. Cela rend la vie difficile lorsque vous vous noyez dans un tsunami de texte.

Diverses solutions (code d'échappement, etc.) qui peuvent être trouvées sur Internet ne sont que des variantes de ce que fait déjà la commande clear.

Alors, comment voulez-vous effacer le contenu d'un terminal sous Linux pour de vrai?

Autocrate
la source
44
Je classerais cela comme "des outils logiciels couramment utilisés par les programmeurs" (mentionnés dans la FAQ comme valides).
Autodidacte
5
Ce que vous demandez vraiment, c'est "Comment puis-je effacer la mémoire tampon de défilement du terminal?" qui est indépendant du shell (Bash) ou d'Ubuntu.
pause jusqu'à nouvel ordre.
@ spiderplant0 probablement parce que AskUbuntu est le bon endroit pour cela - en ce moment. N'existait pas lorsque cela a été demandé, donc il a été fermé comme hors sujet, même si ce n'est pas le cas.
jcollum
1
C'est une question plus générale, qui affecte non seulement Ubuntu ou bash, comme l'a noté @Dennis. Je changerais le sujet "Effacer l'écran bash d'Ubuntu pour de vrai" -> "Effacer un écran de terminal pour de vrai"
Ra_
Il existe de nombreux types de terminaux différents avec lesquels vous pouvez exécuter Bash (le terme " terminal bash " n'a pas de sens). La "suppression" ne s'applique pas à tous - parfois, l'approximation la plus proche est de déchirer le papier et de jeter / déchiqueter / brûler / détruire le bit dont vous ne voulez pas.
Toby Speight

Réponses:

500

Utilisez la commande suivante pour faire un écran clair au lieu de simplement ajouter de nouvelles lignes ...

printf "\033c"

oui c'est un 'printf' sur l'invite bash.

Vous voudrez probablement définir un alias ...

alias cls='printf "\033c"'

Explication

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

Cela devient <ESC>cdonc le code d'échappement VT100 pour réinitialiser le terminal. Voici quelques informations supplémentaires sur les codes d'échappement du terminal.

Éditer

Voici quelques autres façons de le faire ...

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

Ce qui précède ne fonctionne pas sur la console KDE (appelée Konsole) mais il y a de l'espoir! Utilisez la séquence de commandes suivante pour effacer l'écran et le tampon de défilement ...

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

Ou utilisez peut-être l'alias suivant sur KDE ...

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

J'ai reçu la commande d'effacement du défilement d' ici .

Autocrate
la source
4
Il s'agit en fait d'un terminal spécifique. "\033c"est ESC cla séquence d'échappement VT-XXX pour "Réinitialisation complète (RIS)". Presque tous les terminaux que les gens utilisent actuellement sont compatibles VT, mais si vous vous retrouvez à utiliser un terminal étrange, cela pourrait ne pas fonctionner. La réponse de @ vpit3833 est plus susceptible de fonctionner en supposant que TERM est correctement défini.
Laurence Gonsalves
2
printfest un Bash intégré (il est vrai que c'est aussi un binaire séparé, mais les prédéfinis ont la priorité et la plupart des shells modernes ont printf).
pause jusqu'à nouvel ordre.
2
@ SDX2000 OK ... Je sais que vous avez spécifié Ubuntu, et j'ai supposé que ceux-ci se comporteraient de la même manière sur tous les émulateurs de terminaux "modernes". J'ai d'abord testé sur le terminal de mon MAC et il ne s'est pas réinitialisé, mais il s'est réinitialisé sur mon Centos Linux.
nhed
12
echo -en "\ 033c"
Jonathon Reinhart
2
0,02 $ quelques années plus tard, mais je suis étudiant à CU. J'ai demandé à mon professeur de systèmes d'exploitation et il a dit que c'était un exemple de séquence d'échappement ANSI: en.wikipedia.org/wiki/ANSI_escape_code Ceci est un exemple de signalisation intrabande.
abgordon
216

Essayez reset. Il efface l'écran du terminal, mais les commandes précédentes sont accessibles via la flèche ou la liaison de touches que vous avez.

vpit3833
la source
3
Merci! Mais il efface tout, y compris l'invite. Voir ma réponse pour une solution qui ne fait pas cela.
Autodidacte
5
@ SDX2000 Les deux effacent l'invite, puis le shell en génère une nouvelle. Le seul inconvénient de la réinitialisation est qu'elle semble être un peu plus lente (probablement parce qu'elle émet plus que simplement ESC c) mais elle est plus portable.
Laurence Gonsalves
@ Laurence merci pour la clarification ... J'ai essayé de réinitialiser mais c'était si lent que j'ai supposé que l'invite était effacée avec tout le reste. Je préférerai toujours utiliser ESC ccar je n'utiliserai probablement jamais d'autre terminal que celui qu'Ubuntu utilise. Bien que cela resetpuisse être utile un jour lorsque je déboguerai une machine distante via le port série, etc.
Autodidact
1
La réinitialisation de @ SDX2000 est également pratique dans les cas où votre terminal est mal altéré parce que vous avez tué quelque chose (ou mis en cache un fichier binaire) et qu'il a laissé votre terme dans un état altéré. Vous êtes-vous déjà retrouvé dans un état où votre invite s'affiche mais pas votre saisie, et lorsque vous appuyez sur Entrée, la nouvelle invite apparaît à côté de l'invite précédente plutôt qu'en dessous? réinitialiser corrige cela. C'est en fait la seule raison pour laquelle je l'utilise ... Je n'ai jamais eu besoin / envie de vider mon tampon de défilement.
Laurence Gonsalves
4
Le délai d'une seconde associé à resetest insupportable pour moi.
Jonathon Reinhart
62
tput reset

Cela fera l'affaire!

Communauté
la source
2
S'exécute beaucoup plus rapidement que plain reset, mais fait toujours le travail!
Ponkadoodle
1
Plus rapide que juste reset
l2aelba
Cela n'a pas toujours suffi, mais tput clear l'a fait
InterLinked
7

Aucune des réponses que j'ai lues ne fonctionnait dans PuTTY, j'ai donc trouvé un commentaire sur cet article :

Dans les paramètres de votre connexion, sous "Fenêtre-> Comportement", vous trouverez un paramètre "Menu système apparaît uniquement sur ALT". Ensuite, CTRL + L, ALT, l (c'est un L minuscule) fera défiler l'écran puis effacera le tampon de défilement.

(pertinent pour l'OP parce que je me connecte à un serveur Ubuntu, mais aussi apparemment pertinent quel que soit le fonctionnement de votre serveur.)

TecBrat
la source
Un commentaire de @Dennis Williamson datant de 3 ans m'a conduit à cette réponse.
TecBrat
En outre, étant donné que dans la « fenêtre » paramètres de PuTTY vous avez activé le menu « système apparaît sur ALT-Space » , vous pouvez rapidement faire CTRL+Lensuite ALT+Space, ce Uqui efface d' abord la fenêtre du terminal remet alors la scrollback pour de vrai.
Pierre Voisin
6

Le lien suivant vous expliquera comment rendre cet alias permanent afin que vous n'ayez pas à le saisir.

/ubuntu/17536/how-do-i-create-a-permanent-bash-alias

Ce sont les étapes détaillées sur ce lien.

  1. vim ~ / .bashrc ou gedit ~ / .bashrc ou quel que soit l'éditeur de texte que vous aimez
  2. mettez l'alias cls = 'printf "\ 033c"' en bas du fichier
  3. sauvegarder et quitter
  4. . ~ / .bashrc (et oui, il devrait y avoir un espace entre. et ~)
  5. maintenant, vérifiez si tout a fonctionné!

Je ne prends aucun crédit pour ces informations simplement en les transmettant.

N1mr0d
la source
4

Avec KDE et Ubuntu 12.04 LTS et le terminal "Konsole", aucune des réponses publiées ne fonctionne. Cependant, appuyer sur le raccourci clavier par défaut CTRL + Maj + X fonctionne! La source:

https://bugs.kde.org/show_bug.cgi?id=288913

The111
la source
3
Ceci a été changé en CTRL + Shift + K dans les versions ultérieures de KDE: bugs.kde.org/show_bug.cgi?id=282593
optimisé
4

Ma commande humaine préférée pour cela est:

reset

Testé sur xterm et VT100. Il aide également après une fin anormale du programme. Conserve le tampon de commande, donc la flèche vers le haut fera défiler les commandes précédentes.

acclamations: D

elbedoit
la source
3

Je sais que la solution utilisant l'impression de nouvelles lignes n'est pas beaucoup prise en charge, mais si tout le reste échoue, pourquoi pas? Surtout lorsque l'on opère dans un environnement où quelqu'un d'autre est susceptible de voir l'écran, mais pas en mesure d'enregistrer. Une solution potentielle est alors l'alias suivant:

alias c="printf '\r\n%.0s' {1..50}"

Ensuite, pour "effacer" le contenu actuel de l'écran (ou plutôt les cacher), tapez simplement c+Entersur le terminal.

nemesisfixx
la source
2

Juste pour ajouter que le tmuxtampon de défilement ne s'efface pas avec clear, resetou printf. Vous en avez besoin :clear-history. Voir lien .

theaws.blog
la source
-2
echo -e "\e[3J"

Cela fonctionne dans les machines Linux

Nithin
la source
5
Bien que nous vous remercions pour votre réponse, il serait préférable qu'elle apporte une valeur supplémentaire en plus des autres réponses. Dans ce cas, votre réponse n'apporte aucune valeur supplémentaire, car un autre utilisateur a déjà publié cette solution. Si une réponse précédente vous a été utile, vous devriez voter contre au lieu de répéter les mêmes informations.
Toby Speight
-53

Compilez cette application.

#include <iostream>
#include <cstring>

int main()
{
  char str[1000];
  memset(str, '\n', 999);
  str[999] = 0;
  std::cout << str << std::endl;
  return 0;
}
Max
la source
33
Désolé, mais ce n'est pas la meilleure solution. Il y a de meilleures méthodes que de cracher 999 nouvelles lignes
pbfy0
2
Il y a en fait une certaine valeur à cela. Dans certains terminaux, effacer l'écran avec les autres méthodes tuera l'historique et ne vous permettra pas de revenir en arrière ... bien qu'avec 999 lignes mon doigt se lasse. Pauvre homme.
JoshuaDavid
@JoshuaDavid Le point essentiel de la question était qu'OP ne voulait pas pouvoir revenir en arrière après l'effacement.
Socowi
@Socowi Mon commentaire portait sur cette réponse -50 mal notée, pas sur le PO. Mais tu as raison!
JoshuaDavid