Оба ответа здесь не упомянуть TruecolorANSI support для 8bpc цвета. Это получит цвет RGB, изначально запрошенный OP.
Вместо ;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 - убедитесь, что вы знаете свою цель, прежде чем использовать этот конкретный вариант escape-кода.
Я хотел бы также отметить 38
и ;5
/;2
- Blue Ice mentioned что 38
маршруты, а затем 5
изменяет цвет. Это немного некорректно.
38
- это расширенный цветной код переднего плана xterm-256; 30
- 37
- это всего лишь 16-цветные коды переднего плана (с яркостью, управляемой кодом эвакуации 1
на некоторых системах и поддерживаемыми при этом 90
- 97
нестандартными «яркими» кодами), которые поддерживаются всеми цветными терминалами, совместимыми с vt100/xterm ,
;2
и ;5
указывают формат цвета, в конечном счете, говорит терминал, сколько еще последовательности, чтобы вытащить: ;5
указав 8-битовый формат (как указано Голубой лед), требующий только один больше сегмент управления, и ;2
указываемый полный 24-битный формат RGB, требующий 3 сегмента управления.
Эти расширенные режимы технически «недокументированные» и полностью определены. Насколько я знаю и могу исследовать, это не, управляемый комитетом ANSI.
Для так склонен, формат 5;
(256 цветов) начинается с 16 оригинальных цветов (как темнота/свет, так что 30-37 и 90-97) в качестве цветов 0-15.
Происходящие цвета 216 (16-231) образованы смещением RGB на 3bpc на 16, упакованным в одно значение.
Окончательные 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;
}
Таким образом, в некотором смысле, вы можете calculate 256 ANSI цвета от исходных значений RGB путем уменьшения их от 8 до 3 бит для того, чтобы сформировать 256 закодированное значение в случае, если вы хотите, чтобы программно сделать на терминалах, не поддерживают Truecolor.
В Википедии есть хорошая статья о [кодах побега ANSI] (http://en.wikipedia.org/wiki/ANSI_escape_code#graphics)! Но, хотя они говорят, что есть способ генерировать цветной выход RGB ('\ 033 [38; 2; r; g; bm'), я не могу заставить его работать в моем терминале gnome. –
Стоит упомянуть: это не имеет никакого отношения к 'bash'. Управляющие последовательности ANSI интерпретируются вашим * терминалом * ('gnome-terminal',' xterm', 'konsole' и т. Д.). 'bash' - это просто * shell * (командный интерпретатор), запущенный вашим терминалом. – MestreLion