mul*_*sen 57 terminal-emulator terminal xterm gnome-terminal
我已经用 Ubuntu 12.04 和 Debian 7 对此进行了测试。当我这样做时
echo $TERM
Run Code Online (Sandbox Code Playgroud)
我得到
xterm
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用下拉菜单“帮助”>“关于”,那么它会显示gnome terminal 3.4.1.1
.
这是否意味着我只使用 gnome-terminal?还是只是xterm?还是 gnome-terminal 是 xterm 的扩展?我糊涂了。
phe*_*mer 54
$TERM
为了什么?该$TERM
变量供应用程序使用以利用该终端的功能。
例如,如果一个程序要显示彩色文本,它必须首先确定您使用的终端是否支持彩色文本,然后如果支持,如何做彩色文本。
其工作方式是系统保留一个已知终端及其功能的库。在大多数系统上,这是在/usr/share/terminfo
(也有 termcap,但它是不再使用的遗留物)。
因此,假设您有一个要显示红色文本的程序。它基本上调用了 terminfo 库,说“给我我必须为 xterm 终端发送红色文本的字节序列”。然后它只需要这些字节并将它们打印出来。
你可以通过这样做自己尝试tput setf 4; echo hi
。这将获得setf
terminfo 功能并将其传递给参数4
,这是您想要的颜色。
现在假设您有一些刚刚发布的闪亮的新终端模拟器,并且系统的 terminfo 库还没有定义它。当您的应用程序去查找如何做某事时,它将失败,因为终端未知。
你的终端解决这个问题的方法是谎报它是谁。所以你的 gnome 终端说“我是 xterm ”。
Xterm 是一个非常基本的终端,自 X11 诞生以来就一直存在,因此大多数终端仿真器都支持它所支持的内容。因此,通过 gnome 终端说它是一个 xterm,它更有可能在 terminfo 库中有一个定义。
对终端类型撒谎的缺点是终端实际上可能比 xterm 支持的多得多(例如,许多新终端支持 256 种颜色,而旧终端仅支持 16 种颜色)。因此,您需要权衡利弊,获得更多功能或更多兼容性。大多数终端会选择更多的兼容性,因此选择将自己宣传为xterm
.
如果你想覆盖它,许多终端会提供一些配置行为的方法。但你也可以只做export TERM=gnome-terminal
.
Gil*_*il' 30
在TERM
环境变量表示终端类型,而不是终端应用。TERM
有一个特定的目的:它告诉在该终端中运行的应用程序如何与终端交互。
应用程序通过编写转义序列与终端交互——字符序列包含不可打印的字符并具有移动光标、擦除部分屏幕、更改当前颜色等效果。在过去,不同品牌的物理终端有不同的转义序列集。因此,操作系统维护终端类型及其特征的数据库。传统的数据库是termcap(“TERMinal CAPabilities”);许多现代系统和应用程序已切换到terminfo。两个数据库都按终端类型的名称进行索引,应用程序使用TERM
环境变量中的终端类型名称查询它们。
如今,大多数终端使用一组标准的转义序列和一些常见的扩展集,因此您不会看到TERM
. 大多数 GUI 终端仿真器都与xterm兼容,即传统的 X 终端(仍在使用和维护)。
与 xterm 不同的终端模拟器可能会以他们自己的名字将他们自己的条目添加到终端数据库中。但是,这与远程外壳不太匹配。一个程序在A机器上运行但是在B机器上显示,例如因为它是从B到A通过ssh启动的,需要查询A机器上的终端数据库。 ssh等远程登录方式携带了TERM
环境变量,但是只有当 B 的终端数据库也有 A 上的值用户条目时,这才有用。因此,许多终端仿真器都坚持TERM=xterm
这一点,这是众所周知的。
终端之间的区别大体上不在于应用程序与其交互的方式,而在于终端与用户交互并适应其环境的方式。例如,Gnome 终端在 Gnome 上看起来不错,并提供了标签和其他细节;Konsole 在 KDE 上看起来不错,并提供了选项卡和其他细节;urxvt 的内存需求很小;Console2 在 Windows 上运行;screen 和 tmux 提供可以附加到不同父终端的会话;等等。由于这些功能都不会对终端中运行的应用程序产生影响,因此大多数终端模拟器使用TERM=xterm
.
要找出 shell 正在运行它的终端,请查看 shell 的父级:
ps -p$PPID
Run Code Online (Sandbox Code Playgroud)
mav*_*lan 12
环境变量 TERM 并不意味着您正在使用的终端。
环境变量 TERM 包含文本窗口功能的标识符。您可以通过使用 > 'infocmp' 命令,使用 'man 5 terminfo' 作为参考来获得这些能力的详细列表。
生成带有嵌入颜色指令的文本时,msgcat 会查看 TERM 变量。今天的文本窗口通常支持至少 8 种颜色。然而,文本窗口通常支持 16 种或更多颜色,即使 TERM 变量设置为仅表示支持 8 种颜色的标识符。在这些情况下,值得将 TERM 变量设置为不同的值:
在大多数情况下,xterm支持 16 种颜色。它还可以支持 88 或 256 色(但不能同时支持)。您可以尝试将 TERM 设置为 xterm-16color、xterm-88color 或 xterm-256color。收货人
rxvt通常支持 16 种颜色。您可以尝试将 TERM 设置为 rxvt-16color。控制台
konsole通常也支持 16 种颜色。您可以尝试将 TERM 设置为 konsole-16color 或 xterm-16color。
设置 TERM 后,您可以通过调用 'msgcat --color=test' 并查看输出是否看起来像一个合理的颜色映射来验证它。环境变量 TERM 包含文本窗口功能的标识符。您可以通过使用“infocmp”命令并使用“man 5 terminfo”作为参考来获得这些能力的详细列表。
归档时间: |
|
查看次数: |
105760 次 |
最近记录: |