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

Я использовал несколько цветов в моей PS1-подсказке, например

\033]01;31\] # pink \033]00m\] # white \033]01;36\] # bold green \033]02;36\] # green \033]01;34\] # blue \033]01;33\] # bold yellow 

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

Я посмотрел на Colorize Bash Console Color, но он не ответил на мой вопрос о списке реальных кодов.

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

См. Также https://unix.stackexchange.com/a/127800/10043

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

Это неверно:

\033]00m\] # white

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

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

Здесь есть список, который добавляет 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" 

Дает мне светло-оранжевый оттенок (это означает, что цветовая схема примерно приближена).

Вы можете видеть цвета на этом графике, так как они выглядят на вашем терминале довольно легко:

 #!/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 

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

 PS1="\[\033[01;32m\]MyPrompt: \[\033[0m\]" 

Обратите внимание на то, что внутренняя часть [ color] цветовой последовательности не экранирована, а окружающие. Цель последнего состоит в том, чтобы указать оболочке, что прилагаемая последовательность не учитывает длину символа подсказки. Если этот счет ошибочен, странные вещи произойдут, когда вы прокрутите назад историю, например, если она слишком длинная, избыточная длина последней прокрученной строки появится в вашей подсказке, и вы не сможете вернуться в он (он игнорируется так же, как подсказка).

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

 PS1='\[\033[01;32m\]$(date): \[\033[0m\]' 

Хотя это не отличный пример, если вы довольны использованием специальных подсказок \d или \D{format} в man bash которые не являются темой вопроса, но могут быть найдены в man bash под PROMPTING . Существуют различные другие полезные escape-последовательности, такие как \w для текущего каталога, \u для текущего пользователя и т. Д.

Похож, по крайней мере, некоторые из списка:

 txtblk='\e[0;30m' # Black - Regular txtred='\e[0;31m' # Red txtgrn='\e[0;32m' # Green txtylw='\e[0;33m' # Yellow txtblu='\e[0;34m' # Blue txtpur='\e[0;35m' # Purple txtcyn='\e[0;36m' # Cyan txtwht='\e[0;37m' # White bldblk='\e[1;30m' # Black - Bold bldred='\e[1;31m' # Red bldgrn='\e[1;32m' # Green bldylw='\e[1;33m' # Yellow bldblu='\e[1;34m' # Blue bldpur='\e[1;35m' # Purple bldcyn='\e[1;36m' # Cyan bldwht='\e[1;37m' # White unkblk='\e[4;30m' # Black - Underline undred='\e[4;31m' # Red undgrn='\e[4;32m' # Green undylw='\e[4;33m' # Yellow undblu='\e[4;34m' # Blue undpur='\e[4;35m' # Purple undcyn='\e[4;36m' # Cyan undwht='\e[4;37m' # White bakblk='\e[40m' # Black - Background bakred='\e[41m' # Red bakgrn='\e[42m' # Green bakylw='\e[43m' # Yellow bakblu='\e[44m' # Blue bakpur='\e[45m' # Purple bakcyn='\e[46m' # Cyan bakwht='\e[47m' # White txtrst='\e[0m' # Text Reset 

на основе https://wiki.archlinux.org/index.php/Color_Bash_Prompt

Другой сценарий, подобный тому, который был опубликован 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 "The values for the first parameter may be one of the following:\n\n" printf " \e[1m-\e[m Will result in the default output.\n" printf " \e[1m-b\e[m This will display the 8 color version of this chart.\n" printf " \e[1m-f\e[m This will display the 256 color version of this chart using foreground colors.\n" printf " \e[1m-q\e[m This will display the 256 color version of this chart without the extra text.\n" printf " \e[1m-bq\e[m This will display the 8 color version of this chart without the extra text.\n" printf " \e[1m-fq\e[m This will display the 256 color version of this chart using foreground colors without the extra text.\n" printf " \e[1m-?|?\e[m Displays this help screen.\n" printf "\nThe remaining parameters are only used if the first parameter is one of: \e[1m-,-f,q,fq\e[m\n\n" printf " \e[1mstart\e[m The color index to begin display at.\n" printf " \e[1mend\e[m The color index to stop display at.\n" printf " \e[1mstart\e[m The number of indexes to increment color by each iteration.\n\n\n" } verbose() { if [[ "$1" != "-q" && "$1" != "-fq" && "$1" != "-bq" ]]; then printf "\nTo control the display style use \e[1m%s\e[m where \e[1m%s\e[m is:\n" '\e[{$value}[:{$value}]m' '{$value}' printf "\n 0 Normal \e[1m1 Bold\e[m \e[2m2 Dim\e[m \e[3m3 ???\e[m \e[4m4 Underlined\e[m \e[5m5 Blink\e[m \e[6m6 ???\e[m \e[7m7 Inverted\e[m \e[8m8 Hidden\e[m\n\n" printf "If \e[1m%s\e[m is not provided it will reset the display.\n\n" '{$value}' fi } eight_color() { local fgc bgc vals seq0 if [ "$1" != "-bq" ]; then printf "\n\e[1;4m8 Color Escape Value Pallette\e[m\n\n" printf "Color escapes are \e[1m%s\e[m\n" '\e[${value};...;${value}m' printf " Values \e[1m30..37\e[m are \e[1mforeground\e[m colors\n" printf " Values \e[1m40..47\e[m are \e[1mbackground\e[m colors\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" printf " \e[${vals:+${vals+$vals;}}1mBOLD\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 Color Escape Value Pallette\e[0m\n\n" printf " \e[1m%s\e[m for \e[1mbackground\e[m colors\n \e[1m%s\e[m for \e[1mforeground\e[m colors\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 

Это должно правильно соответствовать используемому терминалу. Для этой цели это немного лучше, но теперь вы можете контролировать многие аспекты того, как это отображается через параметры. Надеюсь, они все понятны.

Я написал функцию 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 устанавливает его жирным шрифтом.