Para que serve $TERM
?
A $TERM
variável é para ser usada por aplicativos para aproveitar os recursos desse terminal.
Por exemplo, se um programa deseja exibir texto colorido, ele deve primeiro descobrir se o terminal que você está usando suporta texto colorido e, em caso afirmativo, como executar o texto colorido.
A maneira como isso funciona é que o sistema mantém uma biblioteca de terminais conhecidos e seus recursos. Na maioria dos sistemas, existe /usr/share/terminfo
(existe também termcap, mas seu legado não é mais usado muito).
Então, digamos que você tenha um programa que deseja exibir texto em vermelho. Basicamente, faz uma chamada para a biblioteca terminfo que diz " me dê a sequência de bytes que tenho que enviar em texto vermelho para o terminal xterm ". Depois, apenas pega esses bytes e os imprime.
Você pode tentar fazer isso sozinho tput setf 4; echo hi
. Isso obterá o setf
recurso terminfo e passará a ele um parâmetro 4
, que é a cor que você deseja.
Por que o terminal gnome está sobre si mesmo:
Agora, digamos que você tenha algum novo emulador de terminal recém-lançado, e a biblioteca terminfo do sistema ainda não possui uma definição para ele. Quando seu aplicativo procurar informações sobre como fazer algo, ele falhará porque o terminal não é conhecido.
A maneira como o seu terminal contorna isso é mentir sobre quem é. Então seu terminal gnome está dizendo " I'm xterm ".
O Xterm é um terminal muito básico que existe desde o início do X11 e, portanto, a maioria dos emuladores de terminal suporta o que ele suporta. Então, pelo terminal gnome dizendo que é um xterm, é mais provável que tenha uma definição na biblioteca terminfo.
A desvantagem de mentir sobre o seu tipo de terminal é que o terminal pode realmente suportar muito mais do que o xterm (por exemplo, muitos terminais novos suportam 256 cores, enquanto os terminais mais antigos suportam apenas 16). Então você tem uma troca, obtém mais recursos ou tem mais compatibilidade. A maioria dos terminais optará por mais compatibilidade e, assim, escolherá se anunciar como xterm
.
Se você deseja substituir isso, muitos terminais oferecerão uma maneira de configurar o comportamento. Mas você também pode fazer export TERM=gnome-terminal
.
$TERM
definido paraxterm
por um bom motivoA
TERM
variável de ambiente indica o tipo de terminal , não a aplicação do terminal .TERM
tem um propósito específico: informa aos aplicativos em execução nesse terminal como interagir com o terminal.Os aplicativos interagem com os terminais escrevendo sequências de escape - sequências de caracteres que incluem caracteres não imprimíveis e têm efeitos como mover o cursor, apagar parte da tela, alterar a cor atual etc. Nos velhos tempos, diferentes marcas de terminais físicos tinham diferentes conjuntos de seqüências de escape. Portanto, o sistema operacional mantém um banco de dados de tipos de terminais e suas características. O banco de dados tradicional é termcap ("TERMinal CAPabilities"); muitos sistemas e aplicativos modernos mudaram para terminfo . Ambos os bancos de dados são indexados pelo nome do tipo de terminal e os aplicativos os consultam usando o nome do tipo de terminal nas
TERM
variáveis de ambiente.Atualmente, a maioria dos terminais usa um conjunto padrão de seqüências de escape com alguns conjuntos comuns de extensões, portanto você não verá muitos valores diferentes de
TERM
. A maioria dos emuladores de terminal da GUI é compatível com o xterm , o tradicional terminal X (que ainda é usado e mantido).Os emuladores de terminal diferentes do xterm podem adicionar sua própria entrada ao banco de dados do terminal com seu próprio nome. No entanto, isso não combina bem com conchas remotas. Um programa em execução na máquina A, mas exibido na máquina B, por exemplo, porque foi iniciado pelo ssh de B para A, precisa consultar o banco de dados do terminal na máquina A. Os métodos de login remoto, como ssh, carregam a
TERM
variável de ambiente, mas isso é útil somente quando o banco de dados do terminal de B também possui uma entrada para o valor do usuário em A. Portanto, muitos emuladores de terminal mantêm oTERM=xterm
que é conhecido universalmente.A diferenciação entre terminais em geral não vem da maneira como os aplicativos interagem com eles, mas da maneira como os terminais interagem com o usuário e se ajustam ao seu ambiente. Por exemplo, o Gnome Terminal fica bem no Gnome e fornece guias e outras informações; O Konsole fica bem no KDE e fornece abas e outros detalhes; O urxvt possui um pequeno requisito de memória; Console2 é executado no Windows; screen e tmux fornecem sessões que podem ser conectadas a diferentes terminais pais; e assim por diante. Como nenhum desses recursos faz diferença nos aplicativos em execução no terminal, a maioria dos emuladores de terminal usa
TERM=xterm
.Para descobrir qual terminal um shell está executando, veja o pai do shell:
fonte
ps -p$PPID
não parece me dizer qual terminal estou executando. Ou pelo menos não de uma maneira que eu entenda. Você tem um exemplo de saída / resposta?A variável de ambiente TERM não significa o terminal que você está usando.
Citando gnu.org :
fonte