Экранирующие последовательности ANSI состоят из последовательности символов, начинающихся с символа Escape, символа 27. Следующий символ часто (хотя и не всегда) представляет собой открытую квадратную скобку: [
Команда echo может отправлять escape-символы, если вы укажете -e
и используете \e
escape.
Стандарт ANSI определяет 8 цветов плюс яркий режим, что дает в общей сложности 16 возможностей. Последовательность:
\e[<number>m
Где <number>
один из:
Передний план:
- 30 черный
- 31 красный
- 32 зеленых
- 33 желтых
- 34 синий
- 35 пурпурный
- 36 голубой
- 37 белых
Задний план:
- 40 черный
- 41 красный
- 42 зеленых
- 43 желтых
- 44 синий
- 45 пурпурный
- 46 голубой
47 белых
0 Сбросить все
- 1 жирный
Итак, чтобы сделать передний план красным, а фон желтым:
$ echo -e "\e[31m\e[43m"
И для включения жирным шрифтом:
$ echo -e "\e[1m"
Конечно, вы можете объединить их все вместе:
$ echo -e "\e[31m\e[43m\e[1m"
Есть много других кодов выхода для других дел.
Например - очистить экран и переместить курсор в верхний левый угол:
$ echo -e "\e[2J\e[1;1H"
Что полезно при смене цвета:
$ echo -e "\e[31m\e[43m\e[1m\e[2J\e[1;1H"
Что изменит цвета, очистит экран и поместит курсор в верхний левый угол. Ну, почти сверху слева. Эхо вставляет возврат каретки, поэтому он движется вниз по линии. Вы можете добавить -n
к эхо, чтобы предотвратить это, если вы суетливы.
Если вы все испортили и не видите, что печатаете, вы можете сбросить цвета терминала до нормальных, нажав:
Ctrl+v
[
0
m
Return
На что вы надеетесь это командная строка. Это будет зависать от неизвестной команды, но вы сможете увидеть, что вы делаете снова.
echo -ne '\e[31;43m'
(вместо вышеупомянутогоecho -e "\e[31m\e[43m"
).Обратите внимание, что современные Xterms поддерживают 32-битный цвет!
Простой пример Чтобы установить красивый темно-фиолетовый фон (эй, каждый на свой собственный) со значением # 53186f, вы делаете:
Обратите внимание, что это мгновенно меняет цвет всего окна, а не только последующего текста. Это особенно удобно для того, чтобы сделать окно, очевидно, другим после ssh'ing для сервера (например). Поместите вышеприведенное «echo» в ваш .bashrc, и ваш терминал автоматически меняет цвета, когда вы входите на этот сервер (но не меняется обратно, когда вы нажимаете Ctrl-D)
В поисках этого вы можете потратить ЧАСЫ в сети - в большинстве документов говорится только о оригинальных 16 цветах ANSI.
Источники: http://www.steike.com/code/xterm-colors/ и http://rtfm.etla.org/xterm/ctlseq.html (см. «Элементы управления операционной системой»).
Обратите внимание: приведенная выше escape-последовательность действительна для XTerms и может не работать для других реализаций «XTerm-подобных» оконных эмуляторов оконных терминалов, которые могут «выглядеть» как XTerm. Например, «gnome-terminal» или «konsole» имеют разные escape-последовательности или могут вообще не реализовывать изменение цвета.
источник
Да. Терминалы ANSI поддерживают коды выхода ANSI . Каждый
Control Sequence Introducer
(CSI
) код в следующем формате:Символ Ascii
27
(ESC
символ) или1b
в шестнадцатеричном формате, сопровождаемый левой квадратной скобкой, а затем буквой, обозначающей действие, которое будет использоваться.Обратите внимание, что список
;
разделенных параметров может быть предоставлен непосредственно перед<<<CODE>>>
параметром.Теперь цвета используют подмножество
CSI
кодов,Select Graphic Rendition
коды. Это в форме:SGR
Код передается в качестве параметраCSI
. К вашему вопросу относятсяSGR
коды 30-49. Коды 30-39 устанавливают цвет переднего плана. Коды 40-49 устанавливают цвет фона.Коды 38 и 48 являются специальными кодами. Это те, которые позволяют вам использовать значения RGB. Формат для них:
Примечание: альтернативное использование включает
\x1b[<3 or 4>8;5;<web safe color index>m
. При таком использовании существует совершенно другая цветовая кодировка. Смотрите ссылку в верхней части этого ответа для получения дополнительной информации.Коды 39 и 49 устанавливают цвета по умолчанию и цвет фона на их значения по умолчанию, которые определяются для каждого терминала.
На практике цвета 30-37 и 40-47 немного отличаются от того, что написано на их этикетках.
Для получения светлых цветов, можно использовать SGI для полужирного,
1
. Жирный вводит в заблуждение имя. Это не делает шрифт жирным. Это на самом деле увеличивает яркость текста. При жирном нанесении цвета становятся:Примечание: последние два блока чисел цветов относятся как к переднему, так и к фоновому (
<index> + (30 or 40)
).Чтобы удалить все стили (вернуться к стандартному / нормальному режиму), используйте
SGR
0.CSI
коды не все графические. Например,ESC[2J
очистит ваш терминал.ESC[<y>;<x>H
устанавливает позицию курсора (индексируется 1). Смотрите статью в Википедии для получения дополнительной информации.Примечание: чтобы проверить это, используйте
echo -e
илиprintf
.источник
ПРИМЕЧАНИЕ. «^ [» Является escape-символом и вставляется с помощью клавиш CTRL-V, CTRL- [, а ^ G является символом колокольчика, вставляется с помощью клавиш CTRL-V, CTRL-G
Следующий блок находится в моем .bash_profile и гарантирует, что мои xterms в этой системе ВСЕГДА белые на черном, даже после входа в другую систему, которая могла изменить мои цвета.
источник
проверьте также проект ScriptEchoColor
он полностью выполнен в Баш сценариев
имеет пакеты для Ubuntu здесь
, но эти сценарии могут быть установлены в любом дистрибутиве , если вы знаете , как (последний можно загрузить с его мерзавцем также).
Вы можете использовать сокращенные или расширенные названия цветов, такие как:
образец:
Кроме того, не забудьте взглянуть на xtermcontrol , для более полного контроля над самим xterm (а не только над символами).
источник
Среди множества кодов ANSI CSI есть один, называемый SGR или Select Graphic Rendition. Это ESC,
[
параметры,m
где параметры представляют собой одно или несколько целых чисел в формате ASCII, разделенных точками с запятой. Множество различных параметров SGR перечислены на странице Википедии выше (хотя это не дает полной информации для всех из них).Некоторые параметры, такие как
1
(полужирный или повышенная интенсивность) и31
(красный текст), являются автономными и могут использоваться по отдельности или в сочетании, например,ESC[31m
илиESC[1;31m
для стандартного красного и полужирного красного текста на переднем плане, соответственно.Другие сами принимают параметры, которые просто предоставляются после кода как числа, разделенные точкой с запятой. Так, например,
ESC[38;5;219m
будет отображаться текст переднего плана в расширенном цвете с номером 219, иESC[38;2;150;100;50m
будет отображаться его в цвете со значениями RGB 150, 100, 50. В этом случае38
это команда «расширенный заданный цвет переднего плана», которая всегда сопровождается подкоманда. Подкоманда2
принимает три параметра, значения красного, зеленого и синего компонентов. Иными словами, подкоманда5
принимает только еще одно значение - число от 0 до 255, указывающее цвет из таблицы, с которой настроен терминал.Следующая функция оболочки может быть удобна для использования этих кодов:
Вы можете использовать это так:
Обратите внимание, что если вы не дадите ему никаких параметров, по
sgr()
умолчанию используется код SGR 0, что означает отключение всех атрибутов и восстановление текста до значения по умолчанию для этого терминала.источник
ESC[38
...m
иESC[38
...m
могут / должны (зависит от вашего источника информации - я полагаю, что конечным из них является itu.int/rec/T-REC-T.416-199303-I ) должны использовать, в противном случае зарезервированный символ:
(для разделения элементов параметров ), так что;
он используется только между полными строками параметров - т.е.ESC[38;2;150;100;50m
должен быть записанESC[38:2::150:100:50m
...2
и150
- так как никто, насколько мне известно , никогда не определял, какое значение следует указывать там, будет использоваться пустое значение по умолчанию - но его часто пропускают а использование только;
в качестве разделителя делает невозможным надежную обработку информации в соответствии со спецификацией.