我已在文件中将终端类型设置为单色,inittab
如下所示:
c2:... tty2 linux-m
但是当我输入带有彩色输出的命令时,例如:
ls --color=always -l
我仍然得到彩色结果。如果终端设置为非彩色(如上文中 inittab 文件中的 tty 定义),情况会怎样?
答案1
仅限终端类型描述使用终端的特定方式。无法保证终端确实会以那种方式运行,也无法保证程序会使用其他信息来操作终端。
在这种情况下,ls
程序使用其自己的硬编码数据库,该数据库表明“linux”确实有颜色。
进一步阅读:ncurses FAQ申请被误认为是图书馆用户
答案2
正如之前提到的,这些程序可能会直接输出ANSI 转义序列:
随着 256 色查找表在显卡上变得普遍,添加了转义序列以从预定义的 256 种颜色中进行选择:[需要引用]
ESC[ … 38;5;<n> … m Select foreground color ESC[ … 48;5;<n> … m Select background color 0- 7: standard colors (as in ESC [ 30–37 m) 8- 15: high intensity colors (as in ESC [ 90–97 m) 16-231: 6 × 6 × 6 cube (216 colors): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5)
232-255:灰度从黑到白,共 24 级
这一论点也将被类似问题的答案所加强,该问题的标题为在 Unix SE 上禁用终端和 SSH 上的颜色。
在您之前针对此主题提出的问题中,您提到您正在使用 xterm。xterm 手册页还列出了-cm
禁用 ANSI 转义序列识别的选项。链接问题的答案中也提到了这一点:
-厘米
此选项禁用对 ANSI 颜色变化转义序列的识别。它将 colorMode 资源设置为“false”。
通过设置终端信息,您可以定义终端的功能(根据人terminfo)因此,你所做的相当于告诉ls
他们你确定你可以做某些事情,但这并不意味着他们必须以任何方式尊重它。