- Вопрос или проблема
- Просто еще один 8-битный 256-цветный вспомогательный скрипт
- Установка:
- Скриншоты
- colorhelp
- colorgrid
- colornames
- bash_colors.sh
- Ответ или решение
- Основные цветовые коды ANSI
- Цвета текста (Foreground)
- Яркие цвета (Bright Foreground)
- Цвета фона (Background)
- Яркие цвета фона (Bright Background)
- Расширенные цветовые коды
- Использование RGB кодов
- Примеры настройки PS1
- Где найти дополнительную информацию
Вопрос или проблема
Я использовал несколько цветов в своем приглашении bash PS1, таких как:
\033]01;31\] # розовый
\033]00m\] # белый
\033]01;36\] # жирный зеленый
\033]02;36\] # зеленый
\033]01;34\] # синий
\033]01;33\] # жирный желтый
Где я могу найти список цветовых кодов, которые я могу использовать?
Я посмотрел на Цвета Bash Консоли, но это не ответило на мой вопрос о списке фактических кодов.
Было бы хорошо, если бы была более читаемая форма тоже.
Это ANSI escape последовательности; эта ссылка ведет на таблицу цветовых кодов, но на той странице Википедии есть и другие интересные вещи. Не все они работают на (например) обычной консоли Linux.
Это неправильно:
\033]00m\] # белый
0
сбрасывает терминал на его значение по умолчанию (которое, вероятно, белое). Фактический код для белого текста – 37. Также закрывающая фигурная скобка в конце (\]
) не является частью цветовой последовательности (см. последние несколько параграфов ниже для объяснения их цели при установке приглашения).
Обратите внимание, что некоторые графические терминалы позволяют задавать пользовательскую цветовую схему. Это повлияет на выходные данные.
Вот список здесь, который добавляет 7 текстовых и 7 фонов цветов, которые я ранее не видел, но они, похоже, работают:
# Цвета переднего плана
90 Темно-серый
91 Светло-красный
92 Светло-зеленый
93 Светло-желтый
94 Светло-синий
95 Светло-магентовый
96 Светло-циановый
# Фоновая палитра
100 Темно-серый
101 Светло-красный
102 Светло-зеленый
103 Светло-желтый
104 Светло-синий
105 Светло-магентовый
106 Светло-циановый
Кроме того, если у вас есть графический терминал с 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="МойСумасшедшийЗапрос..."
fi
Имейте в виду, что когда вы используете цветовые escape последовательности в своем приглашении, вы должны заключать их в экранированные (\
с префиксом) квадратные скобки, вот так:
PS1="\[\033[01;32m\]МоеПриглашение: \[\033[0m\]"
Обратите внимание, что [
внутри цветовой последовательности не экранированы, но заключающие скобки экранированы. Цель последних – указать оболочке, что заключенная последовательность не учитывается в длине символов приглашения. Если это количество неверно, странные вещи произойдут, когда вы прокручиваете назад по истории, например, если оно слишком длинное, избыточная длина последней прокрученной строки будет казаться прикрепленной к вашему приглашению, и вы не сможете удалить ее с помощью клавиши Backspace (она игнорируется так же, как и приглашение).
Также обратите внимание, что если вы хотите включить вывод команды, выполняемой каждый раз, когда используется приглашение (в отличие от того, чтобы выполнять его только один раз при установке приглашения), вы должны установить его как буквальную строку с одинарными кавычками, например:
PS1='\[\033[01;32m\]$(date): \[\033[0m\]'
Хотя это не очень хороший пример, если вам нравится использовать специальные \d
или \D{format}
escape последовательности bash — которые не являются темой вопроса, но могут быть найдены в man bash
в разделе PROMPTING
. Существует множество других полезных escape последовательностей, таких как \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). Вы можете использовать эту формулу в shell-скрипте:
#!/bin/sh
function RGBcolor {
echo "16 + $1 * 36 + $2 * 6 + $3" | bc
}
fg=$(RGBcolor 1 0 2) # Фиолетовый
bg=$(RGBcolor 5 3 0) # Ярко-оранжевый.
echo -e "\\033[1;38;5;$fg;48;5;${bg}mфиолетовый на мандарине\\033[0m"
Похоже, что по крайней мере часть списка:
txtblk='\e[0;30m' # Черный - Обычный
txtred='\e[0;31m' # Красный
txtgrn='\e[0;32m' # Зеленый
txtylw='\e[0;33m' # Желтый
txtblu='\e[0;34m' # Синий
txtpur="\e[0;35m" # Фиолетовый
txtcyn='\e[0;36m' # Циановый
txtwht="\e[0;37m" # Белый
bldblk='\e[1;30m' # Черный - Жирный
bldred='\e[1;31m' # Красный
bldgrn='\e[1;32m' # Зеленый
bldylw='\e[1;33m' # Желтый
bldblu='\e[1;34m' # Синий
bldpur="\e[1;35m" # Фиолетовый
bldcyn='\e[1;36m' # Циановый
bldwht="\e[1;37m" # Белый
unkblk='\e[4;30m' # Черный - Подчеркнутый
undred='\e[4;31m' # Красный
undgrn='\e[4;32m' # Зеленый
undylw='\e[4;33m' # Желтый
undblu='\e[4;34m' # Синий
undpur="\e[4;35m" # Фиолетовый
undcyn='\e[4;36m' # Циановый
undwht="\e[4;37m" # Белый
bakblk='\e[40m' # Черный - Фон
bakred='\e[41m' # Красный
bakgrn='\e[42m' # Зеленый
bakylw='\e[43m' # Желтый
bakblu='\e[44m' # Синий
bakpur="\e[45m" # Фиолетовый
bakcyn='\e[46m' # Циановый
bakwht="\e[47m" # Белый
txtrst="\e[0m" # Сброс текста
основано на https://wiki.archlinux.org/index.php/Color_Bash_Prompt
Я написал функцию bash, которая может показать вам все цвета, если это поможет.
function colorgrid( )
{
iter=16
while [ $iter -lt 52 ]
do
second=$[$iter+36]
third=$[$second+36]
four=$[$third+36]
five=$[$four+36]
six=$[$five+36]
seven=$[$six+36]
if [ $seven -gt 250 ];then seven=$[$seven-251]; fi
echo -en "\033[38;5;$(echo $iter)m█ "
printf "%03d" $iter
echo -en " \033[38;5;$(echo $second)m█ "
printf "%03d" $second
echo -en " \033[38;5;$(echo $third)m█ "
printf "%03d" $third
echo -en " \033[38;5;$(echo $four)m█ "
printf "%03d" $four
echo -en " \033[38;5;$(echo $five)m█ "
printf "%03d" $five
echo -en " \033[38;5;$(echo $six)m█ "
printf "%03d" $six
echo -en " \033[38;5;$(echo $seven)m█ "
printf "%03d" $seven
iter=$[$iter+1]
printf '\r\n'
done
}
Вы можете добавить это в .bashrc / .bash_profile / .bash_aliases или сохранить это как скрипт и запустить его таким образом.
Вы можете использовать цвета, чтобы изменить цвет, как я сделал с моим именем ниже.
Я изменил свое имя в моем .bash_profile так:
if [ "$USER" = "plasmarob" ]; then
p="\[\033[01;38;5;52m\]p"
l="\[\033[01;38;5;124m\]l"
a="\[\033[01;38;5;196m\]a"
s="\[\033[01;38;5;202m\]s"
m="\[\033[01;38;5;208m\]m"
a2="\[\033[01;38;5;214m\]a"
r="\[\033[01;38;5;220m\]r"
o="\[\033[01;38;5;226m\]o"
b="\[\033[01;38;5;228m\]b"
local __user_and_host="$p$l$a$s$m$a2$r$o$b"
else
local __user_and_host="\[\033[01;36m\]\u"
fi
...
export PS1="$__user_and_host $__cur_location $__git_branch_color$__git_branch$__prompt_tail$__last_color "
Обратите внимание, что префикс 01 в строке, как \[\033[01;38;5;214m\]a
установит это в жирный.
Другой скрипт, подобный тому, что был опубликован TAFKA ‘goldilocks’ для отображения цветов, который, возможно, немного практичнее для справочных целей:
#!/bin/bash
useage() {
printf "\n\e[1;4mAscii Escape Code Helper Utility\e[m\n\n"
printf " \e[1mUseage:\e[m colors.sh [-|-b|-f|-bq|-fq|-?|?] [start] [end] [step]\n\n"
printf "Значения для первого параметра могут быть одним из следующих:\n\n"
printf " \e[1m-\e[m Приведет к выводу по умолчанию.\n"
printf " \e[1m-b\e[m Это отобразит 8-цветную версию этой таблицы.\n"
printf " \e[1m-f\e[m Это отобразит 256-цветную версию этой таблицы, используя цвета текста.\n"
printf " \e[1m-q\e[m Это отобразит 256-цветную версию этой таблицы без дополнительного текста.\n"
printf " \e[1m-bq\e[m Это отобразит 8-цветную версию этой таблицы без дополнительного текста.\n"
printf " \e[1m-fq\e[m Это отобразит 256-цветную версию этой таблицы, используя цвета текста, без дополнительного текста.\n"
printf " \e[1m-?|?\e[m Показывает этот экран помощи.\n"
printf "\nОстальные параметры используются только если первый параметр является одним из: \e[1m-,-f,q,fq\e[m\n\n"
printf " \e[1mstart\e[m Индекс цвета, с которого начинать отображение.\n"
printf " \e[1mend\e[m Индекс цвета, на котором остановить отображение.\n"
printf " \e[1mstart\e[m Количество индексов, на которое увеличить цвет при каждой итерации.\n\n\n"
}
verbose() {
if [[ "$1" != "-q" && "$1" != "-fq" && "$1" != "-bq" ]]; then
printf "\nЧтобы контролировать стиль отображения используйте \e[1m%s\e[m где \e[1m%s\e[m это:\n" '\e[{$value}[:{$value}]m' '{$value}'
printf "\n 0 Нормальный \e[1m1 Жирный\e[m \e[2m2 Тусклый\e[m \e[3m3 ???\e[m \e[4m4 Подчеркнутый\e[m \e[5m5 Мерцающий\e[m \e[6m6 ???\e[m \e[7m7 Инверсный\e[m \e[8m8 Скрытый\e[m\n\n"
printf "Если \e[1m%s\e[m не предоставлено, оно сбросит отображение.\n\n" '{$value}'
fi
}
eight_color() {
local fgc bgc vals seq0
if [ "$1" != "-bq" ]; then
printf "\n\e[1;4m8 Цветовая Значение Палитра\e[m\n\n"
printf "Цветовые escape последовательности это \e[1m%s\e[m\n" '\e[${value};...;${value}m'
printf " Значения \e[1m30..37\e[m это \e[1mцвета текста\e[m\n"
printf " Значения \e[1m40..47\e[m это \e[1mцвета фона\e[m\n\n"
fi
for fgc in {30..37}; do
for bgc in {40..47}; do
fgc=${fgc#37}
bgc=${bgc#40}
vals="${fgc:+$fgc;}${bgc}"
vals=${vals%%;}
seq0="${vals:+\e[${vals}m}"
printf " %-9s" "${seq0:-(default)}"
printf " ${seq0}TEXT\e[m"
done
printf "\e[0m\n"
done
}
if [[ "$1" == "-b" || "$1" == "-bq" ]]; then
eight_color "$1"
verbose "$1"
elif [[ "$1" == "" || "$1" == "-" || "$1" == "-f" || "$1" == "-q" || "$1" == "-fq" ]]; then
start=${2:-0}
end=${3:-255}
step=${4:-1}
color=$start
style="48;5;"
if [[ "$1" == "-f" || "$1" == "-fq" ]]; then
style="38;5;"
fi
perLine=$(( ( $(tput cols) - 2 ) / 9 ));
if [[ "$1" != "-q" && "$1" != "-fq" ]]; then
printf "\n\e[1;4m256 Цветовая Значение Палитра\e[0m\n\n"
printf " \e[1m%s\e[m для \e[1mцветов фона\e[m\n \e[1m%s\e[m для \e[1mцветов текста\e[m\n\n" '\e[48;5;${value}m' '\e[38;5;${value}m'
fi
while [ $color -le $end ]; do
printf "\e[m \e[${style}${color}m %3d \e[m " $color
((color+=step))
if [ $(( ( ( $color - $start ) / $step ) % $perLine )) -eq 0 ]; then
printf "\n"
fi
done
printf "\e[m\n"
verbose "$1"
else
useage
fi
Это должно правильно масштабироваться для терминала, который вы используете. Это немного избыточно для этой цели, но теперь вы можете контролировать многие аспекты того, как это отображается через параметры. Надеюсь, они все самопояснительные.
RGB мнемоники могут использоваться вместо цветовой последовательности: \e[s;38;2;r;g;bm
Где s – стиль, а r,g,b – десятичные числа в диапазоне от 0 до 255.
R='\[\e[38;2;255;100;100m\]'
G='\[\e[38;2;100;255;100m\]'
B='\[\e[38;2;100;100;255m\]'
W='\[\e[0m\]'
PS1="[$R\u$W@$B\h$W:$G\w$W]\$ "
#!/bin/bash
function colorgrid()
{
end=250
for((red=0; red <= end; red+=75)); do
for((green=0; green <= end; green+=75)); do
for style in 0 "1;3"; do
for((blue=0; blue <= end; blue+=5)); do
printf "\e[$style;38;2;$red;$green;${blue}mH"
done
printf "\e[0m\n"
done
done
done
}
Вы можете опираться на ответы @goldilocks и @Michael Durrant, чтобы создать что-то более читаемое, например, так:
CYAN="\[\e[01;36m\]"
WHITE="\[\e[01;37m\]"
BLUE="\[\e[01;34m\]"
TEXT_RESET="\[\e[00m\]"
TIME="\t"
CURRENT_PATH="\W"
ROOT_OR_NOT="\$"
export PS1="${CYAN}[${BLUE}${TIME}${WHITE} ${CURRENT_PATH}${CYAN}]${ROOT_OR_NOT}${TEXT_RESET} "
Что приведет к:
cat "$0" 1>&2;
#
# = 256-color тест =
#
# [
# |*| Источник: https://unix.stackexchange.com/a/643715
# |*| Исходный источник: https://misc.flogisoft.com/bash/tip_colors_and_formatting#colors2
# |*| Последнее обновление: CE 2021-05-15 03:17 UTC ]
#
#
# Этот скрипт должен выводить кучу цветовых кодов, генерируя красивую цветовую таблицу: демонстрируя совместимость 256 цветов оболочки / терминала.
#
#
#
#
# == Реализация ==
#
# === Таблица 0..15 ===
Colors="$(
# Цвета (0..15):
i=0;
while
echo "$i";
[ $i -lt 15 ];
do
i=$(( $i + 1 ));
done;
)";
echo;
for x0 in \
'48' '38'; # Фон / Передний план
do {
for Color in \
$Colors;
do {
printf '\e['"$x0"';5;%sm %3s ' \
"$Color" "$Color"; # [Примечание 1]
# 8 записей на строку:
[ $(( ($Color + 1) % 8 )) -eq 0 ] && echo -e '\e[m'; # [Примечание 1]
};
done;
};
done;
unset Colors x0;
echo;
# === Таблица 16..255 ===
for Color in \
$(
# Цвета (16..255):
i=16;
while
echo "$i";
[ $i -lt 255 ];
do
i=$(( $i + 1 ));
done;
);
do {
Colors="$Colors $Color";
# 6 записей на группу:
[ $(( ($Color + 1) % 6 )) -eq 4 ] && {
for x0 in \
'38' '48'; # Передний план / Фон
do {
for Color in \
$Colors;
do
printf '\e['"$x0"';5;%sm %3s ' \
"$Color" "$Color"; # [Примечание 1]
done;
echo -ne '\e[m'; # [Примечание 1]
};
done;
unset Colors x0;
echo;
};
};
done;
unset Color;
echo;
#
#
#
#
# == Заметки ==
#
# [Примечание 1]
# [
# Для объяснения цветового кода:
# |*| Утилита тестирования цвета: https://unix.stackexchange.com/a/643536 ]
#
cat "$0" 1>&2;
#
# = 256-color тест (старый) =
#
# [
# |*| Источник: https://unix.stackexchange.com/a/643715
# |*| Исходный источник: https://misc.flogisoft.com/bash/tip_colors_and_formatting#colors2
# |*| Последнее обновление: CE 2021-05-15 03:17 UTC ]
#
#
# В основном это реплика оригинала без изменения логики. Оставлено в основном для справки.
#
#
#
#
# == Реализация ==
#
# Цвета (0..255):
Colors="$(
i=0;
while
echo "$i";
[ $i -lt 255 ];
do
i=$(( $i + 1 ));
done;
)";
echo;
for x0 in \
'38' '48'; # Передний план / Фон
do {
for Color in \
$Colors;
do {
printf '\e['"$x0"';5;%sm %3s ' \
"$Color" "$Color";
# 6 записей на строку:
[ $(( ($Color + 1) % 6 )) -eq 4 ] && echo -e '\e[m';
};
done;
echo;
};
done;
unset Colors x0 Color;
Просто еще один 8-битный 256-цветный вспомогательный скрипт
Он предоставляет:
-
переменные окружения
- для всех 4-битных стандартных цветов (в виде 8-битного кода).
- для escape и end кодов
-
функции:
- 8-бит
colorgrid
(от plasmarob) - 4-битная
colornames
сетка, отображающая цвета и фоны с названиями цветов (Должен признать, что переменные имеют префикс, который не отображается. Я думал о том, чтобы удалить префиксы позже.) colorhelp
распечатывает яркий текст помощи, чтобы напомнить пользователю, как использовать все это.
- 8-бит
Установка:
Я храню скрипт в /etc/profile.d/bash_colors.sh
, чтобы функции и цветовые переменные были доступны по всей системе.
Чтобы установить его только для одного пользователя, сохраните его в ~/.bash_colors и добавьте следующий код в ваш ~/.bash_aliases
файл (который сам должен быть загружен в ~/.bashrc):
if [ -f ~/.bash_colors ]; then
. ~/.bash_colors
fi
Скриншоты
colorhelp
colorgrid
Также вызывает colorhelp (вновь, кредиты plasmarob за сетку):
colornames
Обратите внимание, что 4-битный черный цвет не обязательно является чисто черным. Это потому, что клиентское программное обеспечение решает, как интерпретировать 4-битные цвета. Это означает, что настраивая свой клиент, вы можете полностью настроить цветовую палитру для кодов в диапазоне от 0 до 15.
bash_colors.sh
#!/bin/bash
# Добавляет некоторые вспомогательные цвета.
# 8-битная 256-цветная таблица поиска
# 2022, Justus Kenklies
#
# кредиты:
# основано на функции colorgrid от plasmarob:
# https://unix.stackexchange.com/questions/124407/what-color-codes-can-i-use-in-my-bash-ps1-prompt/285956#285956
#
# Escape коды
ESC_SEQ="\033["
COL_RESET=$ESC_SEQ"0m"
FG=$ESC_SEQ"38;5;"
BG=$ESC_SEQ"48;5;"
# стандартные цвета
BLACK=$FG"0m"
RED=$FG"1m"
GREEN=$FG"2m"
YELLOW=$FG"3m"
BLUE=$FG"4m"
MAGENTA=$FG"5m"
CYAN=$FG"6m"
WHITE=$FG"7m"
# высокоинтенсивные цвета
BRIGHT_BLACK=$FG"8m"; GRAY=$BRIGHT_BLACK; GREY=$GRAY
BRIGHT_RED=$FG"9m"
BRIGHT_GREEN=$FG"10m"
BRIGHT_YELLOW=$FG"11m"
BRIGHT_BLUE=$FG"12m"
BRIGHT_MAGENTA=$FG"13m"
BRIGHT_CYAN=$FG"14m"
BRIGHT_WHITE=$FG"15m"
# фоновая стандартная палитра
BG_BLACK=$BG"0m"
BG_RED=$BG"1m"
BG_GREEN=$BG"2m"
BG_YELLOW=$BG"3m"
BG_BLUE=$BG"4m"
BG_MAGENTA=$BG"5m"
BG_CYAN=$BG"6m"
BG_WHITE=$BG"7m"
# фоновые высокоинтенсивные цвета
BG_BRIGHT_BLACK=$BG"8m"; BG_GRAY=$BG_BRIGHT_BLACK; BG_GREY=$BG_GRAY
BG_BRIGHT_RED=$BG"9m"
BG_BRIGHT_GREEN=$BG"10m"
BG_BRIGHT_YELLOW=$BG"11m"
BG_BRIGHT_BLUE=$BG"12m"
BG_BRIGHT_MAGENTA=$BG"13m"
BG_BRIGHT_CYAN=$BG"14m"
BG_BRIGHT_WHITE=$BG"15m"
function printcolor() {
local FG=$1
local BG=$2
fg=`eval echo "\$\{$FG\}"`
bg=`eval echo "\$\{BG_$BG\}"`
eval echo -en "$fg$bg"
printf ' $%-17s' $FG;
echo -en "${COL_RESET}"
}
#нижние фоны
function colornames() {
local colors=(BLACK RED GREEN YELLOW BLUE MAGENTA CYAN WHITE)
local lowup=()
lowup[0]="_"
lowup[1]="_BRIGHT_"
local fgcolor bgcolor
echo "Список цветовых переменных."
#таблица
for bgbright in ${lowup[@]}
do
#echo "writing ${bgbright:1} bg colors"
#column header
for bg in ${colors[@]}
do
# echo -en "\$$bg\t"
printf ' $BG_%-14s' ${bgbright:1}$bg;
done
# перенос строки:
echo ""
for fgbright in ${lowup[@]}
do
#echo "writing ${fgbright:1} fg colors"
for fg in ${colors[@]}
do
fgcolor=${fgbright:1}$fg
for bg in ${colors[@]}
do
bgcolor=${bgbright:1}$bg
printcolor $fgcolor $bgcolor
done
# перенос строки:
echo ""
done
done
echo ""
done
}
function colorhelp() {
echo -e "\nЧтобы написать цветной текст, начните с ${RED}\${ESC_SEQ}${COL_RESET} (${MAGENTA}\\\033[${COL_RESET}) и"
echo -e "добавьте код цвета из ${MAGENTA}colorgrid()${COL_RESET}, "
echo -e "или начните с ${RED}\${(RED|GREEN|YELLOW|BLUE|MAGENTA|CYAN)}${COL_RESET}."
echo -e "Закройте текст с $RED\${COL_RESET}${COL_RESET} (${MAGENTA}\\\033[0m${COL_RESET})"
echo -en "\nПример:\n${YELLOW}echo $RED-e $YELLOW\"$RED"
echo -en "Смотрите: ${MAGENTA}\${ESC_SEQ}${BLUE}38;5;243m${RED}Этот текст темно-серый${MAGENTA}\${COL_RESET}${RED} а этот обычный текст."
echo -e "$YELLOW\"$COL_RESET"
echo -e "Смотрите: ${ESC_SEQ}38;5;243mЭтот текст темно-серый${COL_RESET} а этот обычный текст.\n"
}
function colorgrid() {
iter=16
while [ $iter -lt 52 ]; do
second=$[$iter+36]
third=$[$second+36]
four=$[$third+36]
five=$[$four+36]
six=$[$five+36]
seven=$[$six+36]
if [ $seven -gt 250 ];then seven=$[$seven-251]; fi
echo -en "\033[38;5;$(echo $iter)m█ "
printf "%03d" $iter
echo -en " \033[38;5;$(echo $second)m█ "
printf "%03d" $second
echo -en " \033[38;5;$(echo $third)m█ "
printf "%03d" $third
echo -en " \033[38;5;$(echo $four)m█ "
printf "%03d" $four
echo -en " \033[38;5;$(echo $five)m█ "
printf "%03d" $five
echo -en " \033[38;5;$(echo $six)m█ "
printf "%03d" $six
echo -en " \033[38;5;$(echo $seven)m█ "
printf "%03d" $seven
iter=$[$iter+1]
printf '\r\n'
done
echo -e "$COL_RESET"
echo "Пример для цвета 153:"
echo -e "echo -e \"\033[38;5;153m\\\033[38;5;153mПривет, мир\\\033[0m\033[0m\""
colorhelp
}
Просто хочу упомянуть, что вы можете использовать Oh My Posh для настройки приглашения Bash (и других оболочек) с использованием полноцветных истинных цветов, используя стандартные шестнадцатеричные коды, кроме того, это предоставляет множество других настроек и функций для приглашения.
Например, вот как я настраиваю “сессию” (пользователь на хосте) часть своего приглашения:
{
type: session,
style: powerline,
template: {{ .UserName }}<#ff5f57>@</>{{ .HostName }},
foreground: #ffde06
},
Ответ или решение
Вопрос об использовании цветовых кодов в выводе Bash PS1-подсказки постоянно интересует программистов и администраторов Linux. В этой статье мы разоберем, какие цветовые коды можно использовать, источник их получения, а также приведем несколько примеров наглядного отображения, чтобы сделать вашу терминальную сессию более привлекательной.
Основные цветовые коды ANSI
В терминале Linux можно использовать ANSI-коды для задания цвета текста и фона. Основные коды дляForeground (текст) и Background (фон) по стандарту следующие:
Цвета текста (Foreground)
- 30: Черный
- 31: Красный
- 32: Зеленый
- 33: Желтый
- 34: Синий
- 35: Пурпурный
- 36: Циан
- 37: Белый
Яркие цвета (Bright Foreground)
- 90: Темно-серый
- 91: Светло-красный
- 92: Светло-зеленый
- 93: Светло-желтый
- 94: Светло-синий
- 95: Светло-пурпурный
- 96: Светло-циан
- 97: Светло-белый
Цвета фона (Background)
- 40: Черный
- 41: Красный
- 42: Зеленый
- 43: Желтый
- 44: Синий
- 45: Пурпурный
- 46: Циан
- 47: Белый
Яркие цвета фона (Bright Background)
- 100: Темно-серый
- 101: Светло-красный
- 102: Светло-зеленый
- 103: Светло-желтый
- 104: Светло-синий
- 105: Светло-пурпурный
- 106: Светло-циан
- 107: Светло-белый
Расширенные цветовые коды
Современные терминалы поддерживают 256 цветов. Для использования этих цветов в Bash-подсказке выводите коды, начинающиеся с 38;5;
для текста и 48;5;
для фона. Например:
echo -e "\033[38;5;214mПривет, мир!\033[0m"
Команда выше выведет текст "Привет, мир!" в светло-оранжевом цвете.
Использование RGB кодов
В некоторых случаях вы можете использовать RGB-коды, например, в формате \e[38;2;R;G;Bm
:
R='\[\e[38;2;255;100;100m\]' # Красный
G='\[\e[38;2;100;255;100m\]' # Зеленый
B='\[\e[38;2;100;100;255m\]' # Синий
W='\[\e[0m\]' # Сброс цвета
PS1="${R}\u${W}@${B}\h${W}:${G}\w${W}\$ "
Примеры настройки PS1
Для настройки PS1 нужно взять в кавычки команды и использовать специальные символы, чтобы терминал правильно интерпретировал длину строки. Пример одного из возможных PS1:
PS1="\[\e[01;36m\][\u@\h \W$\[\e[0m\] "
Где найти дополнительную информацию
- Для получения дополнительной информации о цветах, кодах ANSI и их использовании, вы можете посетить этот ресурс на Wikipedia или предложение на ArchWiki.
- Существуют утилиты и скрипты, как тот, что приведен выше, которые могут помочь вам в тестировании цветов:
for i in {0..255}; do
printf "\e[38;5;${i}m Color $i \n"
done
В заключение, использование цветных кодов в Bash PS1 позволяет значительно улучшить удобство работы с терминалом, а также сделать его более привлекательным. Экспериментируйте с цветами и настройками, которые подходят именно вам!