ANSI颜色特定RGB序列Bash

时间:2013-03-28 13:02:15

标签: ansi-escape

我知道在bash终端中,一种可靠的改变颜色的方法是使用ANSI转义序列。例如:

echo -e "\033[0;31mbrown text\033[0;00m"

应输出

brown text (in brown)

有没有办法使用ANSI的特定RGB集输出颜色?说我想要鲜红色:

echo -e "**\033[255:0:0m**red text\033[0;00m"

这种事情存在吗?

我只想使用标准bash。

5 个答案:

答案 0 :(得分:59)

这两个答案都未提及8bpc颜色的Truecolor ANSI support。这将获得OP最初要求的RGB颜色。

使用;5代替;2,并指定 R G B 值( 0-255)在以下三个控制段中。

\x1b[38;2;40;177;249m

测试if your terminal supports Truecolor

printf "\x1b[38;2;40;177;249mTRUECOLOR\x1b[0m\n"

在我的机器上,XTerm愉快地输出了正确的颜色;虽然,在现代RGB颜色之前的终端之后建模的终端通常不支持truecolor - 确保在使用转义码的这个特定变体之前知道你的目标。


我还要指出38;5 / ;2 - 蓝冰mentioned 38路线然后{{1改变颜色。这有点不正确。

5是xterm-256扩展前景色代码; 38 - 30只是16色前景代码(亮度由某些系统上的转义代码37控制,可论证支持1 - 90所有符合vt100 / xterm标准的彩色终端都支持非标准“明亮”代码。

97;2表示颜色的格式,最终告诉终端要拉多少个序列:;5指定8位格式(如Blue Ice所述)仅需要1个控制段,;5指定需要3个控制段的完整24位RGB格式。

这些扩展模式技术上“未记录”,并且完全是实现定义的。据我所知并可以研究,他们由ANSI委员会管理。


如此倾向,;2(256色)格式从16种原始颜色(暗/亮,30-37和90-97)开始,颜色为0-15。

进行216种颜色(16-231)由3bpc RGB值偏移16形成,打包成单个值。

最终的24种颜色(232-256)是灰度,从比黑色稍浅的阴影开始,直到比白色稍暗的阴影。有些仿真器将这些步骤解释为所有三个通道上的(5;)的线性增量,但我遇到了一些似乎明确定义这些值的仿真器。

这是一个Javascript函数,它执行这样的转换,同时考虑了所有的灰色。

256 / 24

因此,在某种程度上,您可以从初始RGB值中calculate 256 ANSI颜色,将它们从8位减少到3位,以便在您希望以编程方式在终端上执行此操作时形成256编码值不支持Truecolor。

答案 1 :(得分:44)

这确实存在,但是不是OP寻找的16777216(256 ^ 3)种颜色,而是有216(6 ^ 3)种均匀分布的颜色,在256种颜色的较大集合中。例如:

echo -e "\033[38;5;208mpeach\033[0;00m"

这将输出一种令人愉悦的桃色文字。


拆开此命令: \ 033 [38; 5; 208m

\ 033 是转义码。 [38; 指向前景的命令。如果您想改变背景颜色,请改用 [48; 5; 只是改变颜色的序列的一部分。最重要的部分, 208米,选择实际颜色。


在这种逃逸的256色序列中可以找到3组颜色。第一组是基本的“糖果”颜色组,或值0-15。然后有一个分布式颜色的立方体,从16-231。最后,有一个详细的灰度设置,从232-255。

您可以在此处找到包含所有这些值的表格:http://bitmote.com/index.php?post/2012/11/19/Using-ANSI-Color-Codes-to-Colorize-Your-Bash-Prompt-on-Linux#256%20(8-bit)%20Colors

答案 2 :(得分:2)

当前真正的颜色转义序列(\ e [38; 2; R; G; Bm)由某些终端仿真器支持,包括gnome-terminal(vte&gt; = 0.36),konsole和st [suckless]。< / p>

某些其他功能支持该功能,例如pterm [putty],术语[enlightenment],urxvt。

xterm介于两者之间:它识别转义序列,但将每种颜色四舍五入到256色调色板中最近的一个。

答案 3 :(得分:1)

这将起作用

echo -e "**\033[38;2;255;0;0m**red text\033[0;00m"

格式:"\033[38;2;R;G;Bm"

  • R是RGB中的红色分量
  • G是RGB的GRREN分量
  • B是RGB的蓝色分量

答案 4 :(得分:-2)

不,没有。

对于nitpick来说,技术上不是“ANSI转义序列”,而是VT100 control codes(在图形终端和术语“RGB”之前很久就定义了它们。)