web-dev-qa-db-fra.com

Pourquoi ces caractères sont-ils écrits sur le terminal en clair?

J'ai récemment fait un clear sur mon terminal et j'ai constaté que les caractères suivants étaient imprimés sur la ligne ci-dessus:

[unknown character]3;J

J'ai fait un clear | hexdump pour examiner cela et a constaté que les caractères suivants avaient été imprimés:

ESC [ 3 ; J ESC [ H ESC [ 2 J

J'ai essayé de taper ces touches dans mon terminal, et j'ai remarqué que bien que l'écran ne s'efface pas, seul le premier J est apparu. Est-ce un bug dans le terminal?

1
James Ko

Il s'agit de ce que l'on appelle une "séquence ESCape" et de la séquence de caractères utilisée pour indiquer au clavier en verre que votre session de terminal émule (selon votre $TERM variable d'environnement) pour "effacer l'écran".

ESC [ 3 ; J ESC [ H ESC [ 2 J est choisi en fonction de la valeur de votre variable d'environnement TERM. (echo $TERM). Si $TERM ne correspond pas au type de terminal que vous utilisez, clear choisira la mauvaise chaîne.

Quel est votre $TERM? Quel genre de terminal?

Par exemple, je tape sur un terminal Gnome ( Ctrl Alt T sur ma connexion graphique Ubuntu 14.04) et

$ echo $TERM
xterm-color
$ clear | od -bc
0000000 033 133 110 033 133 062 112
        033   [   H 033   [   2   J
0000007
$ clear

efface mon écran en silence.

Lorsque je suis connecté à un Ctrl Alt F1 session, mon $TERM commence comme "linux", et est défini sur xterm-color par mon ~/.bashrc

Commencez par lire man tput;man terminfo, et lisez les pages man mentionnées dans leur SEE ALSO sections.

1
waltinator