![Linux 9 命令将 ANSI/颜色序列发送到单色终端](https://linux22.com/image/214808/Linux%209%20%E5%91%BD%E4%BB%A4%E5%B0%86%20ANSI%2F%E9%A2%9C%E8%89%B2%E5%BA%8F%E5%88%97%E5%8F%91%E9%80%81%E5%88%B0%E5%8D%95%E8%89%B2%E7%BB%88%E7%AB%AF.png)
我在 Rocky Linux 9 上使用 Wyse50 终端仿真。手册页、帮助屏幕等无法使用,因为系统输出终端仿真器无法理解的属性和颜色代码;例如,man cp
这样读:
1mSYNOPSIS0mm
1mcp 22m[4mOPTION24m]... [4m-T24m] 4mSOURCE24m 4mDEST0mm
1mcp 22m[4mOPTION24m]... 4mSOURCE24m... 4mDIRECTORY0mm
1mcp 22m[4mOPTION24m]... 4m-t24m 4mDIRECTORY24m 4mSOURCE24m...m m
1mDESCRIPTION0mm
我已经更新了最新的 terminfo 软件包,并在最新的 wy50 和 Linux 4 上的 wy50 之间进行了 infocmp,一切正常。
我在 profile、bash_profile、bashrc 或 .bashrc 中没有看到任何可以设置任何颜色参数的内容。
我缺少什么? (属于上个世纪的遗留应用程序除外)
答案1
我反对托马斯·迪基将这种行为描述为错误特征。
我已经在别处详细阐述了我的理由。
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=312935
简而言之,Wyse 50、现代终端仿真器和 *ix 内核控制台设备都不是 Teletype 机器的仿真器。
对于 groff 1.24,我想将 grotty 打造成一个 terminfo 应用,以便它能够更智能地适应终端能力。
然而,即使它做到了这一点,它也不能可靠地模仿 Teletype Corporation Model 37,因为当今使用的大多数终端仿真器都无法做到这一点。
同时您可以设置 GROFF_NO_SGR 环境变量。
答案2
答案3
一般来说,在 Linux 发行版或其他 Unix 系统中,当使用串行端口或等效的伪终端(例如在ssh
ortelnet
会话中)时,各个程序的输出按原样直接发送到终端 - 没有任何类型用于 Linux 内核或其他任何地方的终端格式化转义序列的翻译层。
许多程序会尝试为您正在使用的终端生成适当的输出,这些输出是根据TERM
环境变量设置确定的,通常会借助诸如 和 之类的库terminfo
,termcap
但那些不这样做的程序则不会——如果您运行的程序没有,并且它需要您没有的终端类型并输出不适当的转义序列,则您的终端将收到不适当的转义序列。