Linux / Commande clear : nettoyer l’écran et conserver le défilement

clear nettoie l’affichage du terminal ; avec ncurses, il tente aussi de vider le tampon de défilement si les capacités du terminal le permettent. Pour ne pas demander cet effacement du défilement, utilisez clear -x : ni cette commande ni clear ne suppriment l’historique des commandes du shell.

Distinguer l’écran, le défilement et l’historique du shell

Le tampon de défilement, ou scrollback, conserve des lignes précédemment affichées que le terminal permet de revoir en remontant. Il est distinct de l’historique du shell, qui mémorise des commandes saisies et peut les proposer avec la flèche vers le haut.

Élément Effet de clear dans l’implémentation ncurses
Affichage courant Envoi des instructions de nettoyage et de positionnement adaptées au terminal.
Tampon de défilement Tentative d’effacement selon les capacités disponibles ; -x omet cette tentative.
Historique des commandes Bash Aucune suppression par cette commande.
Fichiers, journaux, variables et répertoire courant Aucune suppression ou réinitialisation de ces données par clear lui-même.

Un écran vide ne prouve donc pas que les commandes ou leurs résultats aient disparu de tous les endroits où ils ont été conservés. Inversement, la flèche vers le haut retrouve une commande enregistrée par le shell, pas automatiquement l’ancienne sortie de cette commande. Le guide de l’historique Bash explique cette mémoire des commandes.

Utiliser clear ou conserver le défilement avec -x

Pour nettoyer l’écran avec le comportement par défaut :

clear

Pour demander le nettoyage de l’écran sans celui du tampon de défilement :

clear -x

Les options de cette page concernent le programme de ncurses. Un autre clear peut ne pas accepter -x ou suivre d’autres règles. Vérifiez l’outil et sa version :

type -a clear
clear -V

Le manuel officiel de clear décrit les capacités clear pour l’écran et E3 pour le défilement. L’émulateur doit encore interpréter les instructions produites ; -x ne promet pas à lui seul une politique de conservation identique dans tous les terminaux.

Pour un essai limité, affichez des lignes numérotées dans un terminal interactif :

(
  for ((ligne=1; ligne<=80; ligne++)); do
    printf 'Ligne de démonstration %02d\n' "$ligne"
  done
)

Saisissez ensuite clear -x à l’invite, puis essayez de remonter dans le défilement. Si la fenêtre contient plus de 80 lignes, augmentez le nombre pour produire un défilement observable. Le comportement dépend de l’émulateur et de sa configuration ; l’exercice ne crée pas de fichier.

Ces lignes d’essai peuvent être reproduites en relançant le bloc. Pour une sortie réelle à conserver, utilisez un journal ou un enregistrement approprié avant un nettoyage : une fois un tampon visuel vidé, clear ne possède pas de fonction d’annulation.

Comprendre TERM et l’option -T

clear n’envoie pas simplement une série de lignes vides. Il utilise TERM, qui décrit le type de terminal, et consulte terminfo, la base de ses capacités. C’est cette description qui lui indique quelles séquences de contrôle produire.

Pour examiner le type déclaré et sa description, si infocmp est installé :

printf '%s\n' "$TERM"
infocmp "$TERM"

L’option -T choisit explicitement une description pour un appel. Par exemple, ce nom n’est à utiliser que si le terminal concerné correspond réellement à cette description :

clear -T xterm-256color

Dans ncurses, -T fait également ignorer les variables de dimensions LINES et COLUMNS. Cette option sert au diagnostic ou à la production d’instructions pour un type connu ; elle ne transforme pas un terminal quelconque en xterm.

Si TERM manque ou si l’entrée est inconnue, vérifiez ce qui est transmis par le terminal, la connexion distante ou l’environnement d’exécution. Contrôlez ensuite que la description terminfo correspondante est installée sur la machine où clear s’exécute. Évitez d’exporter un type arbitraire uniquement pour faire disparaître le message d’erreur.

Choisir entre Ctrl+L, clear, tput et reset

Redessiner une ligne avec Readline

À l’invite Bash avec la configuration Readline documentée par défaut, Ctrl+L appelle clear-screen : l’écran est nettoyé et la ligne en cours est redessinée en haut. Vous pouvez ainsi réorganiser l’affichage sans valider la commande que vous êtes en train de saisir.

Un raccourci peut toutefois être réaffecté ou intercepté par le terminal et l’application. Ce geste n’est pas nécessairement identique à lancer le programme ncurses clear. La référence des commandes de déplacement Readline distingue clear-screen de clear-display, qui tente aussi de vider le défilement.

Utiliser tput ou réinitialiser un terminal déréglé

tput peut lui aussi demander les instructions de nettoyage à terminfo :

tput clear

Ce n’est pas une garantie de conservation du défilement : ncurses partage désormais une partie de cette logique avec clear. Le manuel officiel de tput décrit aussi son option -x pour omettre cette tentative dans son implémentation.

Si le problème concerne plutôt un écho de saisie absent, des modes d’entrée anormaux ou des fins de ligne déréglées après la sortie d’un programme, reset vise la réinitialisation de l’état du terminal. À l’invite du shell, il peut alors être adapté :

reset

Le manuel de tset et reset explique les modes rétablis. Dans certains états anormaux, l’invite peut ne plus afficher les caractères saisis et une fin de ligne avec Ctrl+J peut être nécessaire. reset modifie les modes du terminal ; il ne remplace pas un simple nettoyage d’écran lorsque tout fonctionne normalement.

Besoin Choix
Nettoyer l’affichage en évitant de demander l’effacement du défilement. clear -x avec ncurses.
Redessiner la ligne en cours à l’invite Bash. Ctrl+L si ce raccourci appelle bien clear-screen.
Produire des instructions issues de terminfo dans un programme. tput, avec les capacités et options adaptées.
Rétablir un état d’entrée et d’affichage devenu anormal. reset de ncurses, dans le contexte approprié.

Éviter les caractères de contrôle dans les journaux d’un script

La sortie de clear contient des instructions de terminal. Si vous la redirigez vers un fichier ou un tube, ces octets peuvent se retrouver dans les données collectées plutôt que nettoyer un écran. Un script destiné aux journaux n’a généralement pas besoin d’effacer l’affichage.

Pour un petit programme volontairement visuel utilisant ncurses, le script complet suivant vérifie que sa sortie standard est un terminal et que TERM possède une valeur utilisable pour tenter l’opération. Enregistrez-le dans un nouveau fichier affichage.sh :

#!/usr/bin/env bash
if [ -t 1 ] && [ -n "${TERM-}" ] && [ "$TERM" != dumb ]; then
  if ! clear -x; then
    printf '%s\n' 'Impossible de rafraîchir cet affichage.' >&2
    exit 1
  fi
fi
printf '%s\n' 'État de la tâche : prêt.'

Exécutez-le avec Bash :

bash affichage.sh

Dans un terminal compatible, le programme tente le nettoyage puis affiche sa ligne d’état. Si la sortie est redirigée ou capturée, il omet le nettoyage et produit uniquement le texte d’état. La condition -t 1 teste le descripteur de la sortie standard ; ce n’est pas une garantie que la description terminfo existe ou que toutes les capacités fonctionnent.

Si la tentative échoue, le diagnostic de clear reste visible, le script ajoute son message et termine avec 1. Il ne remplace pas automatiquement clear -x par une forme qui pourrait effacer le défilement. Cet exemple ne dépend pas d’un effacement pour accomplir une opération sur des fichiers.

Vérifier un comportement inattendu

  • L’ancien texte reste accessible en remontant. Vérifiez si -x est utilisé, si l’émulateur accepte l’effacement du défilement et quel clear est réellement résolu. Ce constat ne renseigne pas sur l’historique des commandes.
  • Le type de terminal est inconnu. Comparez TERM au terminal utilisé et vérifiez son entrée avec infocmp sur la machine qui exécute la commande.
  • Des caractères étranges apparaissent dans un fichier. Vérifiez les redirections et réservez les séquences de terminal à une sortie prévue pour les interpréter.
  • La saisie ou les modes du terminal sont déréglés. Examinez le contexte avant d’employer reset ; un écran simplement encombré ne nécessite pas de réinitialiser ces modes.

Pour inspecter un alias, une fonction ou plusieurs programmes portant le même nom, utilisez type -a clear. Diagnostiquer l’outil, le terminal et la destination de la sortie permet de choisir une correction adaptée sans confondre nettoyage visuel et suppression de données.