我希望在golang中实现一个远程客户端,它通过nc连接到Linux并启动bash.所以我需要告诉bash我可以从它发送给我的stdout中解析哪些功能,以及我将如何将密钥代码和其他内容发送到它的stdin,以便它也可以解析它们.
这是通过TERM = something环境变量来完成的,我需要将其设置为某个值.如果我没有设置它,那么各种程序开始抱怨:
$mc
The TERM environment variable is unset!
我发现我可以设置TERM愚蠢地说我的客户真的有限.而且似乎我错过了一些东西.
$export TERM=dumb
$mc
Your terminal lacks the ability to clear the screen or position the cursor.
从这里看起来像哑终端没有这两种能力,但它仍然有什么能力?有关于它的规范或事实上的标准吗?
解决方法:
去源可以帮助.终端数据库有评论.这是一个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,
假设“哑”和“未知”终端类型,但很少使用:
>“dumb”有automargins(文本在右边缘“换行”),假定有80列,ASCII BEL和回车符.由于缺少更好的东西,cud1(向下光标)是一个ASCII换行符. ind(index)值相同,这意味着当您到达屏幕底部时文本会向上滚动.
没有光标寻址(杯)或替代(例如任意沿着行或列移动).
>“unknown”添加“generic”标志,标记它不适合curses应用程序使用.把它想象成一台打印机.
至于最低要求,实际上取决于个人应用. ncurses可以设法在没有杯子的情况下在屏幕上移动.它适用于六种策略.如果您阅读mvcur的来源,您可以了解它的需求.
但是,诸如mc之类的应用程序不仅仅依赖于ncurses来决定它是否有效,因为(在这种情况下)它可能与slang链接(它不会密切检查).因此,mc会自行检查,这可能会增加限制.
在实践中,除非您选择有限的终端描述,例如“哑”,否则您可能遇到的大多数终端都可以使用.
进一步阅读:
标签:linux,shell,go,terminal,golang
来源: https://codeday.me/bug/20190828/1756660.html