Quelles commandes puis-je utiliser pour réinitialiser et effacer mon terminal?

64

J'ai utilisé la commande:

reset

effacer mon terminal. Bien que je sois certain que ce n’est pas ce que je devrais faire. Réinitialiser, comme son nom l'indique, réinitialise l'ensemble de votre terminal (change beaucoup de choses). Voici ce que je veux:

Je veux fondamentalement utiliser la commande clear. Cependant, si vous effacez et faites défiler l'écran vers le haut, vous obtenez toujours des tonnes de choses d'avant. En général, cela ne pose pas de problème, mais je regarde les journaux bruts qui sont longs et je veux m'assurer que je ne regarde que le plus récent. Je sais que je pourrais utiliser moreou quelque chose comme ça mais je préfère cette approche.

soixantefootersdude
la source
il semble y avoir beaucoup de confusion sur ce qui est demandé exactement ici. pouvez-vous clarifier la question du tout? que voulez-vous accomplir exactement, en effaçant votre tampon de défilement terminal? (si oui, quelle application de terminal utilisez-vous?)
Quack Quichotte
1
Ctrl-L effacera l'écran en bash (en mode emacs, ce qui est le mode par défaut), similaire à l'exécution du programme clear.
Je viens de tester cela dans le terminal bash d'IntelliJ IDE. Fonctionne bien et efface le défilement qui est exactement ce que je voulais. Merci.
Ian Lewis
Je sais que cela a été répondu à mort, mais je pense que ce que vous voulez, c'est clear && printf '\033[3J'. Pas de réinitialisation du terminal, il suffit d'effacer le texte à l'écran. Voir ce post: superuser.com/questions/555554/…
jwd 10/10

Réponses:

57

Le tampon de défilement n'est pas une fonctionnalité de bash mais du programme terminal. Vous n'avez pas dit quel terminal vous utilisez.

Si vous utilisez xterm, vous pourrez peut-être effacer les lignes enregistrées en renvoyant ESC-c au terminal.

Cela peut ou non fonctionner avec le programme de terminal que vous utilisez.

Sur linux cela fonctionnera probablement:

echo -e '\0033\0143'

sur FreeBSD, echo n'accepte pas -e, vous pouvez donc essayer:

printf '\033\143'
Craig
la source
J'utilise xterm. Cependant, je ne comprends pas ce que vous voulez dire. Devrais-je taper littéralement echo ESC-c?
Sixtyfootersdude
2
@sixtyfootersdude: Non, pas un littéral ESC. Lisez les articles "Caractère d'échappement" et "Caractère de contrôle" sur Wikipedia - ESCest souvent utilisé pour désigner le caractère ASCII 0x1B, que vous pouvez insérer en appuyant sur ^Vsuivi de Esc.
Grawity
1
Tu ne devrais pas. Si votre solution implique l'écriture de séquences d'échappement de terminal brutes, vous devez repenser la solution. Je voudrais utiliser "moins" au lieu de chat. Si vous souhaitez vraiment en savoir plus sur les "séquences d'échappement terminales", Google peut vous aider.
Craig
2
@HaraldNordgren est mieux d'utiliser le printf plus standard que echo -e.
Bonne personne
3
Pourquoi \0143au lieu de c?
Ruakh
51

Utilisez le bon outil pour chaque travail:

  • Utilisez clearpour effacer la fenêtre du terminal.

  • Utilisez cette resettouche pour réinitialiser votre terminal lorsqu'il est perturbé par des séquences de contrôle.

  • Utilisez catuniquement lorsque vous voulez diffuser beaucoup de données d'un endroit à un autre sans interruption .

  • Utilisez un programme de pagination tel que lessou mostpour afficher les pages de sortie.

  • Utilisez tail -f /var/log/foo.log /var/log/bar.logpour regarder plusieurs fichiers de log différents.

    • Avec GNU tail, l’ -Foption est préférable car elle permet de continuer à suivre le fichier même lorsqu’un nouveau fichier apparaît à sa place, comme c’est le cas pour les fichiers journaux.
gros nez
la source
14
Cela ne répond pas vraiment à ma question.
Sixtyfootersdude
7
Oui cela le fait. Ne lisez pas les fichiers de chat, les fichiers de chat pour les concaténer. Utilisez moins ou plus pour lire les fichiers - vous n’avez donc pas le même problème.
Rich Bradshaw
Look up "utilisation inutile du chat"
galois
Beaucoup de gens s'opposent à l'utilisation de « catlire» n'importe quoi, mais pour les petits fichiers, cela leur semble plus sensé catque d'utiliser less. Une fois que le fichier a été vidé sur le terminal, vous pouvez le parcourir / revenir au fichier aussi souvent que vous le souhaitez, sans avoir à le fermer lessavant de faire autre chose.
GKFX
23

Juste pour donner une réponse technique: resetréinitialisez le terminal, comme s'il venait d'être rouvert. stty sanefera beaucoup de la même fonctionnalité (sans la réinitialisation). C'est la même chose que ^L(Ctrl + L) (irrc), et tput clear. Malgré ce que l'affiche précédente (@grawity) a dit, clearne génère pas beaucoup de nouvelles lignes. Il envoie le TERMreset comme défini dans terminfoou termcap, pour moi, en utilisant gnome-terminal(xterm), il est identique à la commande perl -e'print "\33[H\33[2J"'.

Si vous souhaitez simplement effacer le tampon - par rapport à la réinitialisation de tout le terminal, essayez ceci tput reset. Il devrait être très rapide et faire ce que vous voulez. (Bien que vous devriez vraiment lire les fichiers avec less)

tput reset, envoie la valeur terminfo pour reset - sur mon terminal (xterm), c’est la même chose que perl -e'print "\33c"'

Evan Carroll
la source
1
Je n'ai pas dit cleargénère beaucoup de nouvelles lignes. Je viens de fournir une commande comme une solution de rechange à elle, car clearefface seulement l'écran , mais pas le tampon de défilement. (Pas dans PuTTY ou Konsole, au moins.)
grawity
1
Pour cette raison, imprimer une série de nouvelles lignes n’est pas vraiment une solution de rechange, vous n’avez aucune idée de ce que le terminal fera du signal clair. Il est préférable de simplement dire aux nouvelles personnes que vous avez une base de données sachant gérer votre terminal. Elle comporte deux valeurs-clés, une qui correspond clearau nom du signal et un autre, et celle-ci resetuniquement. résulte en un tampon de défilement effacé effacé. resetenvoie ce dernier, au-dessus de faire d'autres choses amusantes.
Evan Carroll
1
Selon la question initiale de sixtyfootersdude, clearil ne réinitialise pas son défilement. ( ESC cfonctionne dans xtermet basé sur VTE, mais pas dans PuTTY et Konsole.) Il ne veut pas utiliser resetnon plus, car cela réinitialise plus qu’il ne le souhaite. (Je ne sais pas quel terminal il utilise - mais comparez sttyavant et après la réinitialisation.)
grawity
2
comme je l'ai dit, il veut probablement tput resetenvoyer le signal de réinitialisation au terminal - sans réinitialiser le terme. "reset - Au lieu de sortir des chaînes d’initialisation, les chaînes de réinitialisation du terminal seront sorties si elles sont présentes (rs1, rs2, rs3, rf). Si les chaînes de réinitialisation ne sont pas présentes, mais que les chaînes d’initialisation le sont, les chaînes d’initialisation seront sorties. Sinon, reset agit de manière identique à init. " Ici, nous avons réinitialisé les chaînes afin que les chaînes init ne soient pas exécutées.
Evan Carroll
+1: pour la suggestion, cependant, tput resetest assez lent (identique à reset). printf '\033\143'est beaucoup plus rapide. Y a-t-il une raison pour laquelle la méthode printf est dangereuse / mauvaise?
Sixtyfootersdude
9

ITerm2 est un autre terminal, avec une séquence d'échappement assez étrange pour effacer le défilement. Dans un shell Bash, j'utilise quelque chose comme:

echo -ne '\033]50;ClearScrollback\a'

dans un script. Donc, en gros, c’est un caractère ESC suivi de " ]50;ClearScrollback" et ensuite d’un caractère BEL.

Sam Mason
la source
1
CMD + K fonctionne dans iTerm2. CTRL + K fonctionne dans beaucoup d'autres.
blockloop
J'aime cette solution car elle me permet de vider le tampon de défilement iTerm2 d'un script shell, lorsque des choses aiment clearou resetnon. Ce n'est pas vraiment la meilleure réponse à la question, cependant. Je pense que la bonne réponse à ce problème est ce que propose l'application terminal, comme command-K dans iTerm2, control-K dans d'autres, etc.
LS
8

La meilleure façon de tout effacer est probablement d'utiliser la fonction du terminal:

  • Konsole: Ctrl+ Shift+ KVoir → Effacer le défilement et réinitialiser
  • Terminal GNOME: Édition → Réinitialiser et effacer
  • PuTTY: Ctrl+ right-click→ Effacer le défilement

De cette façon, les deux mémoires tampons sont nettoyées et l'état du terminal revient exactement à ce qu'il était au démarrage (ce qui peut être identique à l'utilisation reset).

Grawity
la source
Hmm, je n'ai pas ça sous mon gnome ...
sixtyfootersdude
@sixtyfootersdude: Je suis sûr qu'il est là, je ne connais pas le menu exact ( gnome-terminalje ne peux pas m'utiliser pour le moment) ... Jetez un coup d'œil à "Outils" et à d'autres menus.
Grawity
Dans xterm son bouton ctrl-milieu -> "réinitialiser et effacer les lignes sauvegardées"
Craig
3
moins -W + F foo.log

+Fest pour "suivre", similaire à tail -fmais vous permet de faire défiler aussi.

Tous les terminaux basés sur vte (GNOME, Xfce, Roxterm) et KDE Konsole vous permettent d’utiliser la molette de défilement pour faire défiler l’intérieur less. Je trouve cela assez pratique.


Alternative à clear:

perl -e 'print "\ n" x512;'

xterm -e 'tail -f foo.log'
Grawity
la source
3

Sur Mac OS X Terminal.app:

Affichage -> Effacer le défilement (ou command- K)

acajaja
la source
@Rohit Si la question portait spécifiquement sur Mac OS X Terminal.app, alors oui, c'est une excellente réponse. Cependant, la question initiale est ambiguë, au mieux je peux le dire, en ce qui concerne le terminal et le système d'exploitation utilisés.
David J.
2

Ce n'est pas un problème "Bash". Cela dépend du terminal que vous utilisez. Par exemple, j'utilise "iterm2" avec macbook pour connecter une machine linux distante. Vous pouvez utiliser "commande + K" pour nettoyer le tampon, ou dans le menu, choisissez "Edition" -> "Effacer le tampon".

Steven Huang
la source
1

Pour effacer l'écran de la console et le tampon de défilement lors de l'exécution de PuTTY, cela fonctionne pour moi:

echo -en "\ec\e[3J"

Il s’agit en fait de 2 séquences "Esc" qui agissent indépendamment ... Elles peuvent être utilisées dans l’un ou l’autre des ordres suivants:

# clears the console screen, but not the scrollback buffer
# this is actually the escape code to "reset" the terminal
echo -en "\ec"

# clears the scrollback buffer, but not the console screen
# screen content remains, and cursor position remains at its last position
echo -en "\e[3J"

L'utilisation de la echo -en "\ec"réinitialisation du terminal peut modifier certains de vos autres paramètres de terminal. Au lieu de "Réinitialiser", vous pouvez faire ceci:

# position the cursor to "Home" (Top Row, First Column)
echo -en "\e[H"

# Erase down: clear the screen from the cursor down to the bottom of the screen.
echo -en "\e[J"

# Note: this is supposed to clear the screen and position the cursor to home,
# but it didn't work like that for me. It cleared the entire screen (above and 
# below the cursor), but left the cursor at its last position.
echo -en "\e[2J"

# putting everything together
echo -en "\e[H\e[J\e[3J"

Vous pouvez mettre cela dans un script shell et cela fonctionne très bien.


Au cas où il y aurait des dépendances du système:

J'utilise PuTTY Connection Manager (version 0.7.1 BETA (version 136)), avec PuTTY (version 0.60).

Dactylographie:

echo \"$TERM\"; /bin/sh --version

rapports:

"xterm"
GNU bash, version 4.1.2(1)-release-(x86_64-redhat-linux-gnu) ...
Kevin Fegan
la source
1

Pour nettoyer le tampon d’écran du matériel ATS dans FreeBSD, vous pouvez utiliser "vidcontrol - Utilitaire de contrôle et de configuration de la console système" avec le paramètre -C Effacer le tampon d’historique.

vidcontrol -C

la commande effacera tout le tampon d'écran de la console actuelle, au-dessus de ce que vous voyez actuellement. Vous voudrez peut-être «effacer» d'abord ou non - à vous de décider.

utilisateur
la source
0

Si vous voulez être sûr que vous regardez les entrées les plus récentes dans un fichier journal, il est probablement préférable d'utiliser tail au lieu de clear/ catque je suppose que vous utilisez.

Josh K
la source
En fait, j'utilise tail -f (logs continus), mais comme ils crachent parfois des milliers de lignes, il est important de faire défiler en arrière. Cependant, il serait bon de savoir que je ne me retourne pas vers un ancien journal.
Sixtyfootersdude
0

Hmmm. Je suppose que si vous utilisez la konsole, vous n’avez pas de chance. Auparavant, vous pouviez simplement "effacer le défilement". Konsole ne vous laissera plus faire ça. Vous devez également le réinitialiser pour qu'il tue tous les programmes que vous exécutiez. Je suppose que j'ai besoin d'un nouveau programme de terminal ......

Bruce
la source