Подтвердить что ты не робот

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.

4b9b3361

Ответ 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" ).