Какие цветовые коды я могу использовать в своем Bash PS1 приглашении?

Вопрос или проблема

Я использовал несколько цветов в своем приглашении bash PS1, таких как:

\033]01;31\] # розовый
\033]00m\]   # белый
\033]01;36\] # жирный зеленый
\033]02;36\] # зеленый
\033]01;34\] # синий
\033]01;33\] # жирный желтый

Где я могу найти список цветовых кодов, которые я могу использовать?

Я посмотрел на Цвета Bash Консоли, но это не ответило на мой вопрос о списке фактических кодов.

Было бы хорошо, если бы была более читаемая форма тоже.

См. также: Как я могу заставить мой приглашение PS1 показывать время, пользователя, хост, директории и ветку Git

Это ANSI escape последовательности; эта ссылка ведет на таблицу цветовых кодов, но на той странице Википедии есть и другие интересные вещи. Не все они работают на (например) обычной консоли Linux.

Это неправильно:

\033]00m\] # белый

0 сбрасывает терминал на его значение по умолчанию (которое, вероятно, белое). Фактический код для белого текста – 37. Также закрывающая фигурная скобка в конце (\]) не является частью цветовой последовательности (см. последние несколько параграфов ниже для объяснения их цели при установке приглашения).

Обратите внимание, что некоторые графические терминалы позволяют задавать пользовательскую цветовую схему. Это повлияет на выходные данные.

Вот список здесь, который добавляет 7 текстовых и 7 фонов цветов, которые я ранее не видел, но они, похоже, работают:

# Цвета переднего плана
90   Темно-серый  
91   Светло-красный  
92   Светло-зеленый    
93   Светло-желтый   
94   Светло-синий 
95   Светло-магентовый  
96   Светло-циановый  

# Фоновая палитра
100  Темно-серый  
101  Светло-красный  
102  Светло-зеленый    
103  Светло-желтый   
104  Светло-синий 
105  Светло-магентовый  
106  Светло-циановый 

Кроме того, если у вас есть графический терминал с 256 цветами (я думаю, что большинство из них сейчас такие), вы можете применять цвета из этой таблицы:

таблица 256 цветов xterm

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 или сохранить это как скрипт и запустить его таким образом.
Вы можете использовать цвета, чтобы изменить цвет, как я сделал с моим именем ниже.

colorgrid() выводит:
Вывод colorgrid()

Я изменил свое имя в моем .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 распечатывает яркий текст помощи, чтобы напомнить пользователю, как использовать все это.

Установка:

Я храню скрипт в /etc/profile.d/bash_colors.sh, чтобы функции и цветовые переменные были доступны по всей системе.

Чтобы установить его только для одного пользователя, сохраните его в ~/.bash_colors и добавьте следующий код в ваш ~/.bash_aliases файл (который сам должен быть загружен в ~/.bashrc):

if [ -f ~/.bash_colors ]; then
    . ~/.bash_colors 
fi

Скриншоты

colorhelp

colorhelp

colorgrid

Также вызывает colorhelp (вновь, кредиты plasmarob за сетку):
colorgrid (также вызывает colorhelp)

colornames

Обратите внимание, что 4-битный черный цвет не обязательно является чисто черным. Это потому, что клиентское программное обеспечение решает, как интерпретировать 4-битные цвета. Это означает, что настраивая свой клиент, вы можете полностью настроить цветовую палитру для кодов в диапазоне от 0 до 15.
colornames

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 позволяет значительно улучшить удобство работы с терминалом, а также сделать его более привлекательным. Экспериментируйте с цветами и настройками, которые подходят именно вам!

Оцените материал
Добавить комментарий

Капча загружается...