ANSI Color Specific RGB Sequence Bash
Я знаю, что в терминах bash надежный способ изменить цвет - это использовать escape-последовательности ANSI. Например:
echo -e "\033[0;31mbrown text\033[0;00m"
должен выводить
brown text (in brown)
Есть ли способ вывода цвета с использованием определенного набора RGB с ANSI? Скажем, я хочу ярко-красный:
echo -e "**\033[255:0:0m**red text\033[0;00m"
Существует ли такая вещь?
Я просто хочу использовать стандартный bash.
Ответы
Ответ 1
Это существует, но вместо цветов 16777216 (256 ^ 3), которые искали OP, есть 216 (6 ^ 3) равномерно распределенных цветов в более широком наборе из 256 цветов. Пример:
echo -e "\033[38;5;208mpeach\033[0;00m"
Это даст приятный вид текста с персиковым цветом.
Отделяя эту команду: \033 [38; 5; 208 м
\033 - это код выхода. Команда [38; направляет команду переднего плана. Если вы хотите изменить цвет фона, вместо этого используйте [48;. 5; - это только часть последовательности, которая меняет цвет. И самая важная часть, 208 м, выбирает фактический цвет.
Существует 3 набора цветов, которые можно найти в 256 цветовой последовательности для этого выхода. Первый набор - это базовый набор цветов "конфеты" или значения 0-15. Тогда есть куб распределенных цветов, от 16-231. Наконец, есть подробный набор оттенков серого от 232-255.
Здесь вы можете найти таблицу со всеми этими значениями: http://bitmote.com/index.php?post/2012/11/19/Using-ANSI-Color -коды к Colorize-СВОИМИ Bash -Prompt-на-Linux # 256 %20 (8 бит) %20colors
Ответ 2
В обоих ответах здесь не упоминается Truecolor Поддержка ANSI для цвета 8bpc. Это получит цвет RGB, изначально запрошенный OP.
Вместо ;5
используйте ;2
и укажите значения R, G и B (0-255) в следующих трех сегментах управления.
\x1b[38;2;40;177;249m
Чтобы проверить если ваш терминал поддерживает Truecolor:
printf "\x1b[38;2;40;177;249mTRUECOLOR\x1b[0m\n"
На моей машине XTerm с радостью выдает правильный цвет; хотя терминалы, смоделированные после терминалов, которые предшествуют современному цвету RGB, обычно не поддерживают truecolor - убедитесь, что вы знаете свою цель, прежде чем использовать этот конкретный вариант escape-кода.
Я также хотел бы указать 38
и ;5
/;2
- Blue Ice , что 38
маршруты, а затем 5
изменяет цвет. Это немного некорректно.
38
- это расширенный цветной код переднего плана xterm-256; 30
- 37
- это просто 16-цветные коды переднего плана (с яркостью, управляемой кодом эвакуации 1
на некоторых системах и поддерживаемыми при этом 90
- 97
нестандартными "яркими" кодами), которые поддерживаемый всеми цветными терминалами, совместимыми с ANSI.
;2
и ;5
указывают формат цвета, в конечном счете сообщая терминалу, сколько еще целых строк: ;5
указание 8-битного формата (как упоминалось в "Blue Ice" ), требующего еще 1 контрольный сегмент, и ;2
с указанием полного 24-битного формата RGB, требующего 3 сегмента управления.
Эти расширенные режимы технически "недокументированы" и полностью определены. Насколько я знаю и могу исследовать, они не регулируются комитетом ANSI.
Для такого наклона формат 5;
(256 цветов) начинается с 16 исходных цветов (как темных, так и 30-37 и 90-97) в качестве цветов 0-15.
Проходящие 216 цветов (16-231) формируются с помощью значения 3 ГБП RGB, равного 16, упакованного в одно значение.
Окончательные 24 цвета (232-256) - это оттенки серого, начиная с оттенка, немного светлее черного, до оттенка, немного более темного, чем белый. Некоторые эмуляторы интерпретируют эти шаги как линейные приращения от (256 / 24
) по всем трем каналам, хотя я сталкивался с некоторыми эмуляторами, которые явно явно определяют эти значения.
Таким образом, вы можете рассчитать 256 цветов ANSI от начальных значений RGB, уменьшив их с 8 до 3 бит, чтобы сформировать 256 в случае, если вы хотите программно сделать это на терминалах, которые не поддерживают Truecolor.
Ответ 3
В настоящее время истинные последовательности выделения цвета (\ e [38; 2; R; G; Bm) поддерживаются определенными терминальными эмуляторами, включая гном-терминал (с vte >= 0,36), консоль и st [suckless].
Функция не поддерживается некоторыми другими, например. pterm [шпатлевка], терминология [просветление], urxvt.
xterm находится на полпути между ними: он распознает escape-последовательности, но округляет каждый цвет до ближайшего в палитре с 256 цветами.
Ответ 4
Нет. Нет.
И для nitpick это технически не "escape-последовательности ANSI", а коды управления VT100 (которые были определены задолго до того, как появились графические терминалы и такие термины, как "RGB" ).