Utilicé varios colores en mi aviso de PS1 como
\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
¿Dónde puedo encontrar una lista de los códigos de color que puedo utilizar?
He mirado en https://unix.stackexchange.com/questions/74024/colorize-bash-console-color pero no responde a mi pregunta sobre una lista de los códigos reales.
Sería bueno si había una forma más legible también.
Véase también https://unix.stackexchange.com/a/127800/10043
Esas son secuencias de escape ANSI; ese enlace es a una tabla de códigos de colores, pero también hay otras cosas interesantes en esa página de Wikipedia. No todas ellas funcionan en (por ejemplo) una consola Linux normal.
Esto es incorrecto:
\033]00m\] # blanco
El código 0
restablece el terminal a su valor por defecto (que probablemente sea el blanco). El código real para el primer plano blanco es el 37. Además, el corchete de cierre escapado al final (\]
) no es parte de la secuencia de colores (vea los últimos párrafos más abajo para una explicación de su propósito en la configuración de un prompt).
Tenga en cuenta que algunos terminales GUI le permiten especificar un esquema de color personalizado. Esto afectará a la salida.
Hay una lista aquí que añade 7 colores de primer plano y 7 de fondo que no había visto antes, pero parecen funcionar:
# 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
Además, si tienes un terminal GUI de 256 colores (creo que la mayoría lo son ahora), puedes aplicar los colores de esta tabla:
xterm 256 color chart]3
La secuencia ANSI para seleccionarlos, utilizando el número de la esquina inferior izquierda, comienza con 38;5;
para el primer plano y 48;5;
para el fondo, y luego el número de color, así por ejemplo
echo -e "\\033[48;5;95;38;5;214mhello world\\033[0m"
Me da una luz de color naranja sobre el bronceado (es decir, la carta de colores se aproxima).
Usted puede ver los colores en este gráfico1 como aparecerían en su terminal con bastante facilidad:
#!/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 salida se explica por sí misma.
Algunos sistemas establecen la variable $TERM a xterm-256color
si estás en una terminal de 256 colores a través de algún código de shell en /etc/profile
. En otros, deberías ser capaz de configurar tu terminal para usar esto. Esto permitirá a las aplicaciones TUI saber que hay 256 colores, y le permitirá añadir algo como esto a su ~/.bashrc
:
if [[ "$TERM" =~ 256color ]]; then
PS1="MyCrazyPrompt..."
fi
Tenga en cuenta que cuando utilice secuencias de escape de color en su prompt, debe encerrarlas entre corchetes escapados (con el prefijo \
), así:
PS1="\[\033[01;32m\]MyPrompt: \[\033[0m\]"
Observe que los [
's interiores a la secuencia de colores no se escapan, pero los que los encierran sí. El propósito de estos últimos es indicar al shell que la secuencia encerrada no cuenta para la longitud de caracteres del prompt. Si esa cuenta es incorrecta, sucederán cosas extrañas cuando se desplace hacia atrás en el historial, por ejemplo, si es demasiado larga, el exceso de longitud de la última cadena desplazada aparecerá adjunta a su prompt y no podrá retroceder en ella (se ignora de la misma manera que el prompt).
También tenga en cuenta que si quiere incluir la salida de un comando que se ejecuta cada vez que se utiliza el prompt (en lugar de una sola vez cuando se establece el prompt), debe establecerlo como una cadena literal con comillas simples, por ejemplo
PS1='\[\033[01;32m\]$(date): \[\033[0m\]'
Aunque este no es un gran ejemplo si usted es feliz con el uso de bash's especial \d
o \D{format}
prompt escapes - que no son el tema de la pregunta, pero se puede encontrar en man bash
en PROMPTING
. Hay varios otros escapes útiles como \w
para el directorio actual, \u
para el usuario actual, etc.
16 + R * 36 + G * 6 + B
El primer color del cubo, en el índice 16 del gráfico, es el negro (RGB 0, 0, 0). Puedes usar esta fórmula en el script de la 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"
Parece que al menos parte de la lista lo es:
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
basado en https://wiki.archlinux.org/index.php/Color_Bash_Prompt
Otro script como el publicado por TAFKA 'goldilocks' para mostrar los colores que es tal vez un poco más práctico para fines de referencia:
#!/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
Esto debería tener el tamaño correcto para el terminal que estás usando. Es un poco exagerado para este propósito, pero ahora puede controlar muchos aspectos de cómo se muestra a través de los parámetros. Esperemos que todos ellos sean autoexplicativos.