TERM =哑终端必须具备的功能

时间:2016-08-17 16:09:27

标签: linux shell go terminal

我希望在中实现一个远程客户端,它通过nc连接到Linux并启动bash。所以我需要告诉bash我可以从它发送给我的stdout解析哪些功能,以及我将如何将密码和其他内容发送到stdin,以便它也可以解析它们。

这是使用TERM=something环境变量完成的,我需要将其设置为某个值。如果我没有设置它,那么各种程序都会开始抱怨:

$ mc
The TERM environment variable is unset!

我发现我可以将TERM设置为dumb来说我的客户真的有限。而且似乎我错过了一些东西。

$ export TERM=dumb
$ mc
Your terminal lacks the ability to clear the screen or position the cursor.

从这里开始看起来dumb终端不具备这两种能力,但它仍有哪些能力?是否有关于它的规范或事实上的标准?

2 个答案:

答案 0 :(得分:3)

去源头可以提供帮助。终端数据库有评论。这是一个slice from that

#### Specials
#
# Special "terminals".  These are used to label tty lines when you don't
# know what kind of terminal is on it.  The characteristics of an unknown
# terminal are the lowest common denominator - they look about like a ti 700.
#

dumb|80-column dumb tty,
        am,
        cols#80,
        bel=^G, cr=^M, cud1=^J, ind=^J,
unknown|unknown terminal type,
        gn, use=dumb,

"哑巴"和"未知"假设终端类型,但很少使用:

  • "哑"有automargins(文本"换行"在右边距),假设有80列,ASCII BEL和回车。由于缺少更好的东西,cud1(向下光标)是一个ASCII换行符。 ind(索引)值相同,这意味着当您到达屏幕底部时文本会向上滚动。

    没有光标寻址(cup)也没有替代(例如任意沿着行或列移动)。

  • "未知"添加"泛型" flag,标记它不适合curses应用程序使用。把它想象成一台打印机。

至于最低要求,实际上取决于个别应用程序。 ncurses可以设法在屏幕上移动,而不必实际拥有cup。它适用于六种策略。如果您阅读了mvcur的来源,就可以了解它的需求。

然而,诸如mc之类的应用程序不仅仅依赖于ncurses来决定它是否有效,因为(在这种情况下)它可能与俚语(它没有密切检查)链接。因此mc会自行检查,这可能会增加限制。

在实践中,除非您选择有限的终端描述,例如" dumb",否则您可能遇到的大多数终端都会有效。

进一步阅读:

答案 1 :(得分:2)

您最好的信息来源是terminfo条目,可以使用infocmp工具轻松查看:

infocmp dumb
#       Reconstructed via infocmp from file: /lib/terminfo/d/dumb
dumb|80-column dumb tty,
        am,
        cols#80,
        bel=^G, cr=^M, cud1=^J, ind=^J,

这使得哑终端非常有限......