En muchos lugares, dependiendo
En terminales virtuales y terminales reales, la TERMvariable de entorno la establece el programa al que se encadena loginy se hereda todo el camino hasta el shell interactivo que se ejecuta una vez que uno ha iniciado sesión. Donde, precisamente, esto sucede varía de un sistema a otro, y de acuerdo con el tipo de terminal.
Los terminales reales, seriales, pueden variar en tipo, de acuerdo con lo que hay en el otro extremo del cable. De manera convencional, el gettyprograma se invoca con un argumento que especifica el tipo de terminal, o se pasa el TERMprograma desde los datos de configuración del servicio de un administrador de servicios.
Los terminales virtuales del kernel, como ha notado, tienen un tipo fijo. A diferencia de NetBSD, que puede variar el tipo de terminal virtual del kernel sobre la marcha, Linux y los otros BSD tienen un único tipo de terminal fijo implementado en el programa de emulación de terminal incorporado del kernel. En Linux, ese tipo coincide linuxcon la base de datos terminfo. (La emulación de terminal de kernel de FreeBSD es un xtermsubconjunto limitado desde la versión 9.)
- En los sistemas que usan
mingettyo vc-get-tty(del paquete nosh) el programa "sabe" que solo puede estar hablando con un terminal virtual, y conectan los tipos de terminal virtual "conocidos" apropiados para el sistema operativo para el que se compiló el programa.
- En sistemas systemd, uno puede ver esto en el
/usr/lib/systemd/system/getty@.servicearchivo de la unidad ( /lib/systemd/system/getty@.serviceen sistemas no fusionados), que leeEntorno = TERM = Linux
establecer la TERMvariable en el entorno pasado a agetty.
Para terminales virtuales del kernel, uno no cambia el tipo de terminal. El programa emulador de terminal en el núcleo no cambia, después de todo. Es incorrecto cambiar el tipo. En particular, esto arruinará el cursor / tecla de edición de reconocimiento de secuencia CSI. Las linuxsecuencias de CSI enviado por emulador de terminal del núcleo de Linux son diferentes a los xtermo vt100las secuencias CSI enviado por los programas de emulación de terminal GUI en modo DEC VT.
Su emulador de terminal GUI es uno de los muchos programas, desde el demonio SSH hasta screen, que utiliza pseudo terminales. El tipo de terminal depende de qué programa de emulador de terminal se esté ejecutando en el lado maestro del pseudo-terminal y de cómo esté configurado. La mayoría de los emuladores de terminal GUI iniciarán el programa en el lado esclavo con una TERMvariable cuyo valor coincida con su emulación de terminal en el lado maestro. Programas como el servidor SSH intentarán "pasar" el tipo de terminal que se encuentra en el extremo del cliente de la conexión. Por lo general, hay algún menú u opción de configuración para elegir entre las emulaciones de terminal.
La mano agarradora
La forma correcta de detectar la capacidad de color no es cablear una lista de tipos de terminales en su secuencia de comandos. Hay muchos tipos de terminales que admiten color.
La forma correcta es mirar lo que dice termcap / terminfo sobre su tipo de terminal.
color = 0
si tput Co> / dev / null 2> & 1
luego
prueba "` tput Co` "-gt 2 && color = 1
colores elif tput> / dev / null 2> & 1
luego
prueba "` tput colors` "-gt 2 && color = 1
fi
Otras lecturas
- Jonathan de Boyne Pollard (2018).
TERM. nosh Guide . Softwares