J'ai utilisé plusieurs couleurs dans mon invite PS1 telles que
\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
Où puis-je trouver une liste des codes de couleur que je peux utiliser?
J'ai regardé Colorize Bash Console Color mais cela n'a pas répondu à ma question sur une liste des codes réels.
Ce serait bien s'il y avait aussi un formulaire plus lisible.
Voir aussi https://unix.stackexchange.com/a/127800/1004
Ce sont séquences d'échappement ANSI ; ce lien est vers un tableau de codes de couleur, mais il y a aussi d'autres choses intéressantes sur cette page Wikipedia. Tous ne fonctionnent pas (par exemple) sur une console Linux normale.
Ceci est une erreur:
\033]00m\] # white
0
Réinitialise le terminal à sa valeur par défaut (qui est probablement blanche). Le code réel pour le premier plan blanc est 37. De plus, l'accolade fermante d'échappement à la fin (\]
) Ne fait pas partie de la séquence de couleurs (voir les derniers paragraphes ci-dessous pour une explication de leur objectif dans la définition d'une invite ).
Notez que certains terminaux GUI vous permettent de spécifier un schéma de couleurs personnalisé. Cela affectera la sortie.
Il y a ne liste ici qui ajoute 7 couleurs de premier plan et 7 couleurs d'arrière-plan que je n'avais pas vues auparavant, mais elles semblent fonctionner:
# 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
De plus, si vous avez un terminal GUI 256 couleurs (je pense que la plupart d'entre eux le sont maintenant), vous pouvez appliquer les couleurs de ce tableau:
La séquence ANSI pour les sélectionner, en utilisant le numéro dans le coin inférieur gauche, commence 38;5;
Pour le premier plan et 48;5;
Pour l'arrière-plan, puis le numéro de couleur, par exemple:
echo -e "\\033[48;5;95;38;5;214mhello world\\033[0m"
Me donne un orange clair sur le bronzage (ce qui signifie que le nuancier est approximativement approximatif).
Vous pouvez voir les couleurs dans ce tableau1 car ils apparaîtront assez facilement sur votre terminal:
#!/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
La sortie est explicite.
Certains systèmes définissent la variable $ TERM sur xterm-256color
Si vous êtes sur un terminal 256 couleurs via du code Shell dans /etc/profile
. Sur d'autres, vous devriez pouvoir configurer votre terminal pour l'utiliser. Cela permettra aux applications TUI de savoir qu'il y a 256 couleurs et vous permettra d'ajouter quelque chose comme ça à votre ~/.bashrc
:
if [[ "$TERM" =~ 256color ]]; then
PS1="MyCrazyPrompt..."
fi
Sachez que lorsque vous utilisez des séquences d'échappement de couleur dans votre invite, vous devez les placer entre crochets d'échappement (préfixé \
), Comme ceci:
PS1="\[\033[01;32m\]MyPrompt: \[\033[0m\]"
Notez que l'intérieur de [
De la séquence de couleurs n'est pas échappé, mais ceux qui l'entourent le sont. Le but de ce dernier est d'indiquer au Shell que la séquence incluse ne compte pas dans la longueur de caractère de l'invite. Si ce décompte est incorrect, des choses étranges se produiront lorsque vous remonterez dans l'historique, par exemple, s'il est trop long, la longueur excessive de la dernière chaîne défilée apparaîtra attachée à votre invite et vous ne pourrez pas revenir en arrière dans (il est ignoré de la même manière que l'invite).
Notez également que si vous souhaitez inclure la sortie d'une commande exécutée à chaque utilisation de l'invite (par opposition à une seule fois lorsque l'invite est définie), vous devez la définir comme une chaîne littérale avec des guillemets simples, par exemple:
PS1='\[\033[01;32m\]$(date): \[\033[0m\]'
Bien que ce ne soit pas un bon exemple si vous êtes satisfait de l'utilisation des échappements spéciaux \d
Ou \D{format}
De bash - qui ne sont pas le sujet de la question mais peuvent être trouvés dans man bash
sous PROMPTING
. Il existe plusieurs autres échappements utiles tels que \w
Pour le répertoire actuel, \u
Pour l'utilisateur actuel, etc.
1. La partie principale de ce tableau, les couleurs 16 à 231 (notez qu'elles ne sont pas dans l'ordre numérique) sont un cube de couleurs RVB 6 x 6 x 6. "Cube de couleur" se réfère au fait qu'un espace colorimétrique RVB peut être représenté à l'aide d'un réseau tridimensionnel (avec un axe pour le rouge, un pour le vert et un pour le bleu). Chaque couleur du cube ici peut être représentée sous forme de coordonnées dans un tableau 6 x 6 x 6, et l'indice du graphique calculé de la manière suivante:
16 + R * 36 + G * 6 + B
La première couleur du cube, à l'index 16 du graphique, est le noir (RVB 0, 0, 0). Vous pouvez utiliser cette formule dans le script Shell:
#!/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"
On dirait qu'au moins une partie de la liste est:
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
basé sur https://wiki.archlinux.org/index.php/Color_Bash_Prompt
J'ai écrit une fonction bash qui peut vous montrer toutes les couleurs, si cela vous aide.
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
}
Vous pouvez jeter cela dans un .bashrc/.bash_profile/.bash_aliases ou l'enregistrer en tant que script et l'exécuter de cette façon. Vous pouvez utiliser les couleurs pour changer de couleur comme je l'ai fait avec mon nom ci-dessous.
J'ai changé mon nom dans mon .bash_profile en faisant ceci:
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 "
Notez que le préfixe 01 dans une chaîne comme \[\033[01;38;5;214m\]a
le met en gras.
Un autre script comme celui publié par TAFKA 'goldilocks' pour afficher les couleurs qui est peut-être un peu plus pratique à des fins de référence:
#!/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
Cela devrait dimensionner correctement pour le terminal que vous utilisez. C'est un peu exagéré à cet effet, mais maintenant vous pouvez contrôler de nombreux aspects de la façon dont cela s'affiche via les paramètres. Espérons qu'ils soient tous explicites.
export PS1=\n\[\e[32;1m\](\[\e[37;1m\]\u\[\e[32;1m\])-(\[\e[37;1m\]jobs:\j\[\e[32;1m\])-(\[\e[37;1m\]\w\[\e[32;1m\])\n$ \[\e[0m\]