À quoi ça sert $TERM
?
La $TERM
variable est utilisée par les applications pour tirer parti des fonctionnalités de ce terminal.
Par exemple, si un programme souhaite afficher du texte en couleur, il doit d'abord savoir si le terminal que vous utilisez prend en charge le texte en couleur, puis, le cas échéant, comment le faire en couleur.
La façon dont cela fonctionne est que le système conserve une bibliothèque de terminaux connus et de leurs capacités. Sur la plupart des systèmes, cela se trouve /usr/share/terminfo
(il y a aussi termcap, mais son héritage n’est plus très utilisé).
Alors disons que vous avez un programme qui veut afficher du texte rouge. Il appelle essentiellement la bibliothèque terminfo qui dit " donnez-moi la séquence d'octets que je dois envoyer pour le texte rouge pour le terminal xterm ". Ensuite, il suffit de prendre ces octets et de les imprimer.
Vous pouvez essayer cela vous-même en faisant tput setf 4; echo hi
. Cela obtiendra la setf
capacité terminfo et lui passera un paramètre 4
, qui est la couleur que vous voulez.
Pourquoi gnome terminal repose sur lui-même:
Maintenant, disons que vous avez un nouvel émulateur de terminal brillant qui vient d'être publié, et que la bibliothèque terminfo du système n'a pas encore de définition pour celui-ci. Lorsque votre application va rechercher comment faire quelque chose, elle échouera car le terminal n'est pas connu.
Votre terminal parvient à contourner ce problème en mentant à propos de qui il s'agit. Donc, votre terminal gnome dit " je suis xterm ".
Xterm est un terminal très basique qui existe depuis l’aube de X11, et la plupart des émulateurs de terminaux supportent donc ce qu’il supporte. Donc, en disant que le terminal gnome est un xterm, il est plus probable qu’il ait une définition dans la bibliothèque terminfo.
L'inconvénient de mentir au sujet de votre type de terminal est que le terminal peut en réalité supporter beaucoup plus que xterm (par exemple, de nombreux nouveaux terminaux supportent 256 couleurs, alors que les anciens terminaux n'en supportaient que 16). Donc, vous avez un compromis, obtenez plus de fonctionnalités ou avez plus de compatibilité. La plupart des terminaux opteront pour davantage de compatibilité et choisiront donc de se faire connaître xterm
.
Si vous souhaitez éviter cela, de nombreux terminaux vous proposeront un moyen de configurer le comportement. Mais vous pouvez aussi simplement faire export TERM=gnome-terminal
.
$TERM
jeu àxterm
pour une bonne raisonLa
TERM
variable d'environnement indique le type de terminal , pas l' application de terminal .TERM
a un objectif spécifique: il indique aux applications fonctionnant dans ce terminal comment interagir avec le terminal.Les applications interagissent avec les terminaux en écrivant des séquences d'échappement - séquences de caractères qui incluent des caractères non imprimables et ont des effets tels que déplacer le curseur, effacer une partie de l'écran, changer la couleur actuelle, etc. Auparavant, les marques de terminaux physiques avaient des ensembles de séquences d'échappement. Par conséquent, le système d'exploitation maintient une base de données des types de terminaux et de leurs caractéristiques. La base de données traditionnelle est termcap («TERMinal CAPabilities»); de nombreux systèmes et applications modernes sont passés à terminfo . Les deux bases de données sont indexées par le nom du type de terminal et les applications les interrogent en utilisant le nom du type de terminal à partir des
TERM
variables d'environnement.De nos jours, la plupart des terminaux utilisent un ensemble standard de séquences d'échappement avec quelques ensembles d'extensions courants, vous ne verrez donc pas beaucoup de valeurs différentes de
TERM
. La plupart des émulateurs de terminaux à interface graphique sont compatibles avec xterm , le terminal X traditionnel (qui est toujours utilisé et maintenu).Les émulateurs de terminal qui diffèrent de xterm peuvent ajouter leur propre entrée à la base de données de terminal sous leur propre nom. Cependant, cela ne va pas bien avec les obus distants. Un programme qui s'exécute sur la machine A mais qui s'affiche sur la machine B, par exemple parce qu'il a été lancé de B en A via ssh, doit interroger la base de données du terminal sur la machine A. Des méthodes de connexion à distance telles que ssh reportent la
TERM
variable d'environnement, mais Cela n'est utile que lorsque la base de données du terminal de B contient également une entrée pour la valeur utilisateur sur A. Par conséquent, de nombreux émulateurs de terminal s'en tiennent,TERM=xterm
ce qui est à peu près universellement connu.La différenciation entre les terminaux ne provient pas en grande partie de la manière dont les applications interagissent avec eux, mais bien de la manière dont les terminaux interagissent avec l'utilisateur et s'intègrent dans leur environnement. Par exemple, Gnome Terminal a une bonne apparence sur Gnome et fournit des onglets et autres subtilités. Konsole semble bien sur KDE et fournit des onglets et autres subtilités; urxvt a peu de mémoire requise; Console2 fonctionne sous Windows; screen et tmux fournissent des sessions pouvant être attachées à différents terminaux parents; etc. Étant donné qu'aucune de ces fonctionnalités ne fait la différence pour les applications exécutées dans le terminal, la plupart des émulateurs de terminal utilisent
TERM=xterm
.Pour savoir quel terminal un shell l'exécute, regardez le parent du shell:
la source
ps -p$PPID
ne semble pas me dire quel terminal je cours. Ou du moins pas d'une manière que je comprends. Avez-vous un exemple de sortie / réponse?La variable d'environnement TERM ne signifie pas le terminal que vous utilisez.
Citant gnu.org :
la source