目前我正在研究一种能够检测人们使用的(伪)终端类型的功能。
我的第一个想法是问/etc/alternatives/x-terminal-emulator
:
term=/etc/alternatives/x-terminal-emulator
test -e $term && file $term | ...
但我不知道它是否能在OSX上运行良好... 也许有更好的方法来检测它?
有人愿意为我提供更多有关检测终端用户的想法吗?
答案 0 :(得分:1)
询问终端本身会很好,但是没有可靠,便携的方法。 OP的问题是在Debian或衍生语的上下文中,因为它引用x-terminal-emulator
,并询问OSX。
当前的技术水平要求用户设置TERM
值,以便终端应用程序(例如ncurses)知道要使用哪个终端描述。许多(可能是“大多数”)应用程序使用termcap或terminfo(或termfo模拟的termcap),但有些应用程序要么硬编码要么使用自己的特殊数据(例如GNU ls)。因此,将TERM
设置为可用值有时取决于由于不同原因而独立维护的数据的公分母。
至于为什么它需要用户这样做:
TERM
设置为xterm
,以便为相应终端的开发人员提供提供准确终端描述的麻烦。TERM
设置为xterm
,但不同。在ncurses中,这些应用程序中TERM
的建议值为nsterm
(或nsterm-256color
)。TERM
的方法时(xterm在命令行选项中执行此操作),用户可以获得更好的结果。XTERM_VERSION
。其他人可能会设置COLOR_TERM
,但没有关于如何使用该变量的标准。 Terminal.app设置TERM_PROGRAM
,iTerm2也是如此。 (默认情况下,这些都不是通过ssh
传递的。)qterm
程序(其他几个具有相同名称但目的不同)通过将模式与终端的响应进行匹配来实现。 tack
程序也使用来自ncurses数据库的数据显示终端的响应。wscons
手册页中以这种模糊的方式提到它:注意:VT100符合ANSI X3.64标准。但是,由于VT100具有ANSI X3.64的非标准扩展,因此它与Sun终端仿真器不兼容。
有趣的是,上次评论的原因是 Sun 自己对ANSI X3.64的非标准扩展:
ESC[s
重置终端仿真器(SUNRESET)不参数。将所有模式重置为默认值,从PROM恢复当前字体。屏幕和光标位置不变。
曾经经常提到过,因为Sun Microsystems的某个人(请参阅本答案的开头)通过将TERM
设置为vt100
来减少了他们的开发工作。
答案 1 :(得分:0)
您可以使用* nix操作系统和OSX上应该存在的$TERM
变量。该变量(通常)由系统初始化,以便让您知道您正在使用哪个终端。
作为奖励,您可以使用toe
command查找系统识别的终端类型列表。