什么使用 TERM 变量?

什么使用 TERM 变量?

根据这个文件:

环境变量 TERM 包含文本窗口功能的标识符。您可以使用“infocmp”命令获取这些功能的详细列表,并使用“man 5 terminfo”作为参考。

但这个TERM变量实际上是如何使用的呢?假设系统运行xterm(X Window 系统的终端仿真器)。是xterm使用TERM变量,还是shell?如果是这样,怎么办?如果设置为,将xterm停止工作?TERMlinux

TERM另外,如果我将其默认值更改为xterm-256color其他值(例如 ),为什么彩色输出不会被禁用xterm

答案1

TERM变量由在终端中运行的程序使用。它应该允许程序确定处理其输出的终端(或模拟器)的功能。它记录在联机ncurses帮助页

终端本身,包括诸如 之类的模拟器,除了设置它之外,xterm并不关心 的值TERM(在模拟器的情况下 - 物理终端则不能)。它知道如何处理某些输出序列,并且它会处理它们,而不关心TERM除其内部状态之外的任何其他内容。您可以TERM在 shell 中设置任何您喜欢的内容,甚至取消设置,而无需更改终端的行为;首先,终端不知道TERM设置了什么!

关心的程序TERM通常是那些使用关心的输出库的程序,例如恩诅咒,或更基本的形式 术语帽或者术语信息。这包括 Bash 和 Zsh 等 shell,它们使用 terminfo,例如用于行编辑功能(当您在历史记录中上下移动时能够删除该行)。这些将 的值映射TERM到功能数据库,该数据库告诉程序或库终端是否可以执行某些任务(例如移动光标、清除屏幕、更改颜色)以及如何执行这些任务。一些程序,例如 GNU grep承担能力甚至没有检查。

TERM从更改xterm-256colorxterm不会有太大变化,特别是它不会禁用程序中的颜色支持,这些程序引用TERMxterm也支持颜色输出。区别在于支持的颜色数量。

键盘输入和文本输出如何工作?,手册页中的颜色,我使用哪种终端类型?,终端使用什么协议/标准?了解更多详情。

答案2

我会说一个很多的 nCurses 程序(和 libtinfo 程序)关心 TERM。

一个例子是htop,当 时,它经常给出“部分覆盖”的行TERM=xterm,但当 时,一切看起来都正常TERM=xterm-color

根据我的经验,不使用 libtinfo(直接或间接,例如通过 nCurses)的程序通常根本不关心 TERM,并假设支持颜色或光标定位等。

相关内容