Esas son secuencias de escape ANSI ; ese enlace es a una tabla de códigos de color, pero también hay otras cosas interesantes en esa página de Wikipedia. No todos funcionan en (por ejemplo) una consola Linux normal.
Esto es incorrecto:
\033]00m\] # white
0
restablece el terminal a su valor predeterminado (que probablemente sea blanco). El código real para el primer plano blanco es 37. Además, la llave de cierre escapada al final ( \]
) no forma parte de la secuencia de colores (consulte los últimos párrafos a continuación para obtener una explicación de su propósito al configurar un aviso).
Tenga en cuenta que algunos terminales GUI le permiten especificar un esquema de color personalizado. Esto afectará la salida.
Aquí hay una lista que agrega 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 tiene un terminal GUI de 256 colores (creo que la mayoría de ellos son ahora), puede aplicar los colores de este cuadro:
La secuencia ANSI para seleccionarlos, usando el número en la esquina inferior izquierda, comienza 38;5;
para el primer plano y 48;5;
para el fondo, luego el número de color, por ejemplo:
echo -e "\\033[48;5;95;38;5;214mhello world\\033[0m"
Me da un color naranja claro en bronceado (es decir, la tabla de colores es aproximadamente aproximada).
Puede ver los colores en este cuadro 1 tal 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 configuran la variable $ TERM xterm-256color
si está en un terminal de 256 colores mediante algún código de shell /etc/profile
. En otros, debería poder configurar su terminal para usar esto. Eso permitirá que las aplicaciones TUI sepan que hay 256 colores y le permitirá agregar algo como esto a su ~/.bashrc
:
if [[ "$TERM" =~ 256color ]]; then
PS1="MyCrazyPrompt..."
fi
Tenga en cuenta que cuando utiliza secuencias de escape de color en su solicitud, debe encerrarlas \
entre corchetes ( prefijados), como este:
PS1="\[\033[01;32m\]MyPrompt: \[\033[0m\]"
Observe que el [
interior de la secuencia de colores no se escapa, pero sí los que lo rodean. El propósito de este último es indicar al shell que la secuencia encerrada no cuenta para la longitud de caracteres de la solicitud. Si ese conteo es incorrecto, sucederán cosas extrañas al desplazarse hacia atrás por el historial, por ejemplo, si es demasiado largo, el exceso de longitud de la última cadena desplazada aparecerá adjunta a su mensaje y no podrá retroceder en (se ignora de la misma manera que el aviso).
También tenga en cuenta que si desea incluir la salida de un comando ejecutado cada vez que se utiliza el indicador (en lugar de solo una vez cuando se configura el indicador), debe configurarlo como una cadena literal con comillas simples, por ejemplo:
PS1='\[\033[01;32m\]$(date): \[\033[0m\]'
Aunque este no es un gran ejemplo si está satisfecho con el uso de escapes especiales \d
o \D{format}
rápidos de bash, que no son el tema de la pregunta, pero se pueden encontrar en la man bash
sección siguiente PROMPTING
. Hay varios otros escapes útiles, como \w
para el directorio actual, \u
para el usuario actual, etc.
1. La parte principal de este cuadro, los colores 16 - 231 (tenga en cuenta que no están en orden numérico) son un cubo de color RGB de 6 x 6 x 6. "Cubo de color" se refiere al hecho de que un espacio de color RGB se puede representar utilizando una matriz tridimensional (con un eje para el rojo, uno para el verde y uno para el azul). Cada color en el cubo aquí se puede representar como coordenadas en una matriz de 6 x 6 x 6, y el índice en el gráfico se calcula así:
16 + R * 36 + G * 6 + B
El primer color en el cubo, en el índice 16 en el gráfico, es negro (RGB 0, 0, 0). Puede usar esta fórmula en el script de 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"
\]
aquí en realidad no es parte de la secuencia de colores; cumple un propósito al establecer avisos específicamente (he agregado algunos párrafos al final de mi respuesta sobre esto). "Sería bueno si hubiera una forma más legible también". -> cortar y pegar en tu propia respuesta es una forma de hacerlo.