Это экранирующие последовательности ANSI ; эта ссылка на таблицу цветовых кодов, но на этой странице Википедии есть и другие интересные вещи. Не все из них работают (например) на нормальной консоли Linux.
Это неверно:
\033]00m\] # white
0
сбрасывает терминал к его настройкам по умолчанию (который, вероятно, белый). Фактический код для белого переднего плана - 37. Кроме того, экранированная закрывающая скобка в конце ( \]
) не является частью цветовой последовательности (см. Последние несколько абзацев ниже для объяснения их назначения при установке приглашения).
Обратите внимание, что некоторые терминалы с графическим интерфейсом позволяют указывать индивидуальную цветовую схему. Это повлияет на вывод.
Здесь есть список, который добавляет 7 цветов переднего плана и 7 цветов фона, которых я раньше не видел, но они, кажется, работают:
# Foreground colors
90 Dark gray
91 Light red
92 Light green
93 Light yellow
94 Light blue
95 Light magenta
96 Light cyan
# Background colors
100 Dark gray
101 Light red
102 Light green
103 Light yellow
104 Light blue
105 Light magenta
106 Light cyan
Кроме того, если у вас есть графический терминал с 256 цветами (я думаю, что большинство из них сейчас), вы можете применить цвета из этой диаграммы:
Последовательность ANSI для их выбора, используя номер в нижнем левом углу, начинается 38;5;
для переднего плана и 48;5;
для фона, затем номер цвета, например, так:
echo -e "\\033[48;5;95;38;5;214mhello world\\033[0m"
Дает мне светло-оранжевый от загара (имеется в виду, приблизительная диаграмма цвета).
Вы можете видеть цвета на этом графике 1 так, как они бы выглядели на вашем терминале довольно легко:
#!/bin/bash
color=16;
while [ $color -lt 245 ]; do
echo -e "$color: \\033[38;5;${color}mhello\\033[48;5;${color}mworld\\033[0m"
((color++));
done
Вывод не требует пояснений.
Некоторые системы устанавливают переменную $ TERM, xterm-256color
если вы находитесь на 256-цветном терминале через некоторый код оболочки в /etc/profile
. На других вы должны быть в состоянии настроить свой терминал для использования этого. Это позволит приложениям TUI знать, что существует 256 цветов, и позволит вам добавить что-то вроде этого к вашему ~/.bashrc
:
if [[ "$TERM" =~ 256color ]]; then
PS1="MyCrazyPrompt..."
fi
Помните, что когда вы используете цветовые escape-последовательности в вашем приглашении, вы должны заключить их в экранированные (с \
префиксом) квадратные скобки, например:
PS1="\[\033[01;32m\]MyPrompt: \[\033[0m\]"
Обратите внимание, что [
внутренняя часть последовательности цветов не избежала, а окружающие - нет. Цель последнего состоит в том, чтобы указать оболочке, что вложенная последовательность не учитывается в длине символа подсказки. Если этот счет неправильный, то при прокрутке истории назад будут происходить странные вещи, например, если она слишком длинная, избыточная длина последней прокручиваемой строки будет отображаться в вашем приглашении, и вы не сможете вернуться на это (это игнорируется так же, как приглашение).
Также обратите внимание, что если вы хотите включить вывод команды, запускаемой каждый раз, когда подсказка используется (в отличие от однократного, когда подсказка установлена), вы должны установить ее в виде буквенной строки с одинарными кавычками, например:
PS1='\[\033[01;32m\]$(date): \[\033[0m\]'
Хотя это не очень хороший пример, если вы довольны использованием специальных \d
или \D{format}
быстрых экранирований bash - которые не являются темой вопроса, но их можно найти в man bash
разделе ниже PROMPTING
. Существуют различные другие полезные экранирования, такие как \w
для текущего каталога, \u
для текущего пользователя и т. Д.
1. Основная часть этой диаграммы, цвета 16 - 231 (обратите внимание, что они не в числовом порядке) - это цветной куб RGB 6 x 6 x 6. «Цветовой куб» относится к тому факту, что цветовое пространство RGB может быть представлено с использованием трехмерного массива (с одной осью для красного, одной для зеленого и одной для синего). Каждый цвет в кубе здесь может быть представлен в виде координат в массиве 6 x 6 x 6, а индекс в диаграмме рассчитывается следующим образом:
16 + R * 36 + G * 6 + B
Первый цвет в кубе с индексом 16 на графике - черный (RGB 0, 0, 0). Вы можете использовать эту формулу в сценарии оболочки:
#!/bin/sh
function RGBcolor {
echo "16 + $1 * 36 + $2 * 6 + $3" | bc
}
fg=$(RGBcolor 1 0 2) # Violet
bg=$(RGBcolor 5 3 0) # Bright orange.
echo -e "\\033[1;38;5;$fg;48;5;${bg}mviolet on tangerine\\033[0m"
\]
здесь на самом деле не является частью цветовой последовательности; это служит определенной цели в настройке подсказок (я добавил несколько абзацев в конец моего ответа по этому поводу). «Было бы неплохо, если бы была и более читаемая форма». -> Вырезать и вставить в свой ответ является одним из способов сделать это.