ANSI颜色特定RGB序列Bash

Blu*_*Ice 30 ansi-escape

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

echo -e "\033[0;31mbrown text\033[0;00m"
Run Code Online (Sandbox Code Playgroud)

应该输出

brown text (in brown)
Run Code Online (Sandbox Code Playgroud)

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

echo -e "**\033[255:0:0m**red text\033[0;00m"
Run Code Online (Sandbox Code Playgroud)

这种事情存在吗?

我只是想使用标准的bash.

Qix*_*Qix 63

这里既有答案不能不提真彩 ANSI支持的8bpc颜色.这将获得OP最初要求的RGB颜色.

而不是;5,使用;2和指定以下三个控制段中的R,GB值(0-255).

\x1b[38;2;40;177;249m
Run Code Online (Sandbox Code Playgroud)

要测试您的终端是否支持Truecolor:

printf "\x1b[38;2;40;177;249mTRUECOLOR\x1b[0m\n"
Run Code Online (Sandbox Code Playgroud)

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


我还想指出的38;5/ ;2-蓝冰提到的那个38路线,然后5改变颜色.这有点不正确.

38是xterm-256扩展前景色码; 30- 37只是16色前景码(通过转义码控制的亮度1在某些系统和可以说支持90- 97非标准"亮"的代码)被所有VT100 /兼容的xterm色终端所支持.

;2;5表示的颜色的格式,最终告诉终端多少多个序列传送到拉:;5仅需要1更多的控制段指定一个8位格式(如蓝雪提到的),以及;2指定要求3一个完整的24位的RGB格式控制段.

这些扩展模式在技术上是 "未记录的",并且完全是实现定义的.据我所知并可以研究,它们不受 ANSI委员会的管辖.


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

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

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

这是一个Javascript函数,它执行这样的转换,考虑到所有的灰色.

function rgbToAnsi256(r, g, b) {
    // we use the extended greyscale palette here, with the exception of
    // black and white. normal palette only has 4 greyscale shades.
    if (r === g && g === b) {
        if (r < 8) {
            return 16;
        }

        if (r > 248) {
            return 231;
        }

        return Math.round(((r - 8) / 247) * 24) + 232;
    }

    var ansi = 16
        + (36 * Math.round(r / 255 * 5))
        + (6 * Math.round(g / 255 * 5))
        + Math.round(b / 255 * 5);

    return ansi;
}
Run Code Online (Sandbox Code Playgroud)

因此,在某种程度上,你可以计算出从8到3位减少他们为了形成要在不支持真彩色终端编程这么做事件256编码值从最初的RGB值256种ANSI颜色.


Blu*_*Ice 44

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

echo -e "\033[38;5;208mpeach\033[0;00m"
Run Code Online (Sandbox Code Playgroud)

这将输出一个令人愉快的桃色文本.


拆开此命令:\ 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-上的Linux#256%20(8位)%20Colors

  • 0-256不是256色; 这是257种颜色!:P (5认同)
  • @HelloGoodbye它实际上是.. 0-255(255是最大值)所以他们的256已经是正确的.. (3认同)

Fox*_*key 7

这会起作用

echo -e "**\033[38;2;255;0;0m**red text\033[0;00m"
Run Code Online (Sandbox Code Playgroud)

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

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