根据这个文件:
环境变量 TERM 包含文本窗口功能的标识符。您可以使用“infocmp”命令获取这些功能的详细列表,并使用“man 5 terminfo”作为参考。
但这个TERM
变量实际上是如何使用的呢?假设系统运行xterm
(X Window 系统的终端仿真器)。是xterm
使用TERM
变量,还是shell?如果是这样,怎么办?如果设置为,将xterm
停止工作?TERM
linux
TERM
另外,如果我将其默认值更改为xterm-256color
其他值(例如 ),为什么彩色输出不会被禁用xterm
?
答案1
该TERM
变量由在终端中运行的程序使用。它应该允许程序确定处理其输出的终端(或模拟器)的功能。它记录在联机ncurses
帮助页。
终端本身,包括诸如 之类的模拟器,除了设置它之外,xterm
并不关心 的值TERM
(在模拟器的情况下 - 物理终端则不能)。它知道如何处理某些输出序列,并且它会处理它们,而不关心TERM
除其内部状态之外的任何其他内容。您可以TERM
在 shell 中设置任何您喜欢的内容,甚至取消设置,而无需更改终端的行为;首先,终端不知道TERM
设置了什么!
关心的程序TERM
通常是那些使用关心的输出库的程序,例如恩诅咒,或更基本的形式 术语帽或者术语信息。这包括 Bash 和 Zsh 等 shell,它们使用 terminfo,例如用于行编辑功能(当您在历史记录中上下移动时能够删除该行)。这些将 的值映射TERM
到功能数据库,该数据库告诉程序或库终端是否可以执行某些任务(例如移动光标、清除屏幕、更改颜色)以及如何执行这些任务。一些程序,例如 GNU grep
,承担能力甚至没有检查。
TERM
从更改xterm-256color
为xterm
不会有太大变化,特别是它不会禁用程序中的颜色支持,这些程序引用TERM
:xterm
也支持颜色输出。区别在于支持的颜色数量。
看键盘输入和文本输出如何工作?,手册页中的颜色,我使用哪种终端类型?,终端使用什么协议/标准?了解更多详情。
答案2
我会说一个很多的 nCurses 程序(和 libtinfo 程序)关心 TERM。
一个例子是htop
,当 时,它经常给出“部分覆盖”的行TERM=xterm
,但当 时,一切看起来都正常TERM=xterm-color
。
根据我的经验,不使用 libtinfo(直接或间接,例如通过 nCurses)的程序通常根本不关心 TERM,并假设支持颜色或光标定位等。