Lo que es $TERM
para?
La $TERM
variable es para uso de las aplicaciones para aprovechar las capacidades de ese terminal.
Por ejemplo, si un programa quiere mostrar texto en color, primero debe averiguar si el terminal que está utilizando admite texto en color y, si lo hace, cómo hacerlo.
La forma en que esto funciona es que el sistema mantiene una biblioteca de terminales conocidas y sus capacidades. En la mayoría de los sistemas esto está dentro /usr/share/terminfo
(también hay un termcap, pero su legado ya no se usa mucho).
Digamos que tiene un programa que quiere mostrar texto rojo. Básicamente hace una llamada a la biblioteca terminfo que dice " dame la secuencia de bytes que tengo que enviar para texto rojo para el terminal xterm ". Luego solo toma esos bytes y los imprime.
Puedes probar esto tú mismo haciendo tput setf 4; echo hi
. Esto obtendrá la setf
capacidad de terminfo y le pasará un parámetro de 4
, que es el color que desea.
Por qué el terminal gnome miente sobre sí mismo:
Ahora supongamos que tiene un emulador de terminal nuevo y brillante que se acaba de lanzar, y la biblioteca terminfo del sistema aún no tiene una definición. Cuando su aplicación vaya a buscar cómo hacer algo, fallará porque no se conoce el terminal.
La forma en que su terminal evita esto es mintiendo sobre quién es. Entonces tu terminal de gnomos dice " I'm xterm ".
Xterm es un terminal muy básico que ha existido desde los albores de X11 y, por lo tanto, la mayoría de los emuladores de terminales admiten lo que admite. Entonces, al decir que el terminal gnome es un xterm, es más probable que tenga una definición en la biblioteca terminfo.
La desventaja de mentir sobre su tipo de terminal es que el terminal podría admitir mucho más que xterm (por ejemplo, muchos terminales nuevos admiten 256 colores, mientras que los terminales más antiguos solo admitían 16). Por lo tanto, tiene una compensación, obtiene más funciones o tiene más compatibilidad. La mayoría de los terminales optarán por una mayor compatibilidad y, por lo tanto, eligen anunciarse como xterm
.
Si desea anular esto, muchos terminales ofrecerán alguna forma de configurar el comportamiento. Pero también puedes hacerlo export TERM=gnome-terminal
.
$TERM
configuradoxterm
por una buena razónLa
TERM
variable de entorno indica el tipo de terminal , no la aplicación de terminal .TERM
tiene un propósito específico: le dice a las aplicaciones que se ejecutan en ese terminal cómo interactuar con el terminal.Las aplicaciones interactúan con los terminales al escribir secuencias de escape: secuencias de caracteres que incluyen caracteres no imprimibles y tienen efectos como mover el cursor, borrar parte de la pantalla, cambiar el color actual, etc. En los viejos tiempos, diferentes marcas de terminales físicos tenían diferentes conjuntos de secuencias de escape. Por lo tanto, el sistema operativo mantiene una base de datos de tipos de terminales y sus características. La base de datos tradicional es termcap ("capacidades finales"); Muchos sistemas y aplicaciones modernos han cambiado a Terminfo . Ambas bases de datos están indexadas por el nombre del tipo de terminal, y las aplicaciones las consultan utilizando el nombre del tipo de terminal de las
TERM
variables de entorno.Hoy en día, la mayoría de los terminales utilizan un conjunto estándar de secuencias de escape con algunos conjuntos comunes de extensiones, por lo que no verá muchos valores diferentes de
TERM
. La mayoría de los emuladores de terminal GUI son compatibles con xterm , el terminal X tradicional (que todavía se usa y mantiene).Los emuladores de terminal que difieren de xterm pueden agregar su propia entrada a la base de datos del terminal con su propio nombre. Sin embargo, esto no encaja bien con los proyectiles remotos. Un programa que se ejecuta en la máquina A pero que se muestra en la máquina B, por ejemplo, porque se lanzó a través de ssh de B a A, necesita consultar la base de datos del terminal en la máquina A. Los métodos de inicio de sesión remoto, como ssh, transfieren la
TERM
variable de entorno, pero esto es útil solo cuando la base de datos de terminales de B también tiene una entrada para el usuario de valor en A. Por lo tanto, muchos emuladores de terminales se adhieren a loTERM=xterm
que es casi universalmente conocido.La diferenciación entre terminales en general no proviene de la forma en que las aplicaciones interactúan con ellos, sino de la forma en que los terminales interactúan con el usuario y se ajustan a su entorno. Por ejemplo, Gnome Terminal se ve bien en Gnome y proporciona pestañas y otras sutilezas; Konsole se ve bien en KDE y proporciona pestañas y otras sutilezas; urxvt tiene un pequeño requisito de memoria; Console2 se ejecuta en Windows; screen y tmux proporcionan sesiones que se pueden conectar a diferentes terminales principales; y así. Dado que ninguna de estas características hace una diferencia en las aplicaciones que se ejecutan en el terminal, la mayoría de los emuladores de terminal utilizan
TERM=xterm
.Para averiguar en qué terminal lo está ejecutando un shell, mire el padre del shell:
fuente
ps -p$PPID
no parece decirme qué terminal estoy ejecutando. O al menos no de una manera que entiendo. ¿Tienes un ejemplo de salida / respuesta?La variable de entorno TERM no significa el terminal que está utilizando.
Citando a gnu.org :
fuente