我希望在golang中实现一个远程客户端,它通过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
终端不具备这两种能力,但它仍有哪些能力?是否有关于它的规范或事实上的标准?
答案 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,
这使得哑终端非常有限......