我知道在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。
答案 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"
答案 4 :(得分:-2)
不,没有。
对于nitpick来说,技术上不是“ANSI转义序列”,而是VT100 control codes(在图形终端和术语“RGB”之前很久就定义了它们。)