Respuesta corta: no utilice códigos de colores "compuestos" como \033[49;36m
Utiliza instrucciones de color separadas como \033[0;42m\033[0;36m
en su lugar. La diferencia se puede ver muy bien comparando la salida de esos dos comandos:
echo -e "\033[0;42;36m\xe2\x96\x88\033[0;49;36m\xe2\x96\x88"
echo -e "\033[0;42m\033[0;36m\xe2\x96\x88\033[0;49;36m\xe2\x96\x88"
(nota que mi versión de bash no pudo procesar \u2588
Así que tuve que recurrir a la variante hexagonal \xe2\x96\x88
).
Sugerencia para el código futuro:
Crear un archivo (por ejemplo en ~/.bash_color_definitions
) con el siguiente contenido:
# Setup some colors to use later in interactive shell or scripts
# Color reset:
export COLOR_RESET='\033[0m' # reset color
# foreground colors
export FG_WHITE='\033[1;37m'
export FG_BLACK='\033[0;30m'
export FG_BLUE='\033[0;34m'
export FG_LIGHT_BLUE='\033[1;34m'
export FG_GREEN='\033[0;32m'
export FG_LIGHT_GREEN='\033[1;32m'
export FG_CYAN='\033[0;36m'
export FG_LIGHT_CYAN='\033[1;36m'
export FG_RED='\033[0;31m'
export FG_LIGHT_RED='\033[1;31m'
export FG_PURPLE='\033[0;35m'
export FG_LIGHT_PURPLE='\033[1;35m'
export FG_BROWN='\033[0;33m'
export FG_YELLOW='\033[1;33m'
export FG_GRAY='\033[1;30m'
export FG_LIGHT_GRAY='\033[0;37m'
# background colors
export BG_WHITE='\033[1;47m'
export BG_BLACK='\033[0;40m'
export BG_BLUE='\033[0;44m'
export BG_LIGHT_BLUE='\033[1;44m'
export BG_GREEN='\033[0;42m'
export BG_LIGHT_GREEN='\033[1;42m'
export BG_CYAN='\033[0;46m'
export BG_LIGHT_CYAN='\033[1;46m'
export BG_RED='\033[0;41m'
export BG_LIGHT_RED='\033[1;41m'
export BG_PURPLE='\033[0;45m'
export BG_LIGHT_PURPLE='\033[1;45m'
export BG_BROWN='\033[0;43m'
export BG_YELLOW='\033[1;43m'
export BG_GRAY='\033[1;40m'
export BG_LIGHT_GRAY='\033[0;47m'
Y la fuente en cada inicio de bash poniendo source ~/.bash_color_definitions
en su .bashrc
o .bash_profile
. Entonces empieza a producir un código más legible como este:
echo -e "$BG_BLACK$FG_CYAN\xe2\x96\x88$BG_GRAY$FG_CYAN\xe2\x96\x88$COLOR_RESET"
EDITAR:
Resulta que el código en mi respuesta en realidad restablece el fondo (como Erik señaló en los comentarios). Después de un poco de pruebas, parece que el Terminal de Mac "mezcla" los colores de primer plano/fondo un poco diferente cuando se intenta utilizar el código de color 49
es decir, el "color de fondo por defecto".
iTerm.app, por ejemplo, no se comporta de esta manera, por lo que podría cambiar fácilmente de terminal, si así lo desea.
Una solución válida, sin embargo, es especificar completamente el color de fondo (es decir, no sólo usar 49;36m
Utilizar 47;36m
si su fondo es blanco). O mejor, utilice el xterm-256color
especificaciones de color; es decir \033[38;5;___m
para el primer plano y \033[48;5;___m
para los colores de fondo (sustituyendo el guión bajo por un número en 0-255). Al menos en mi ordenador, esto produce colores consistentes:
echo -e "\033[48;5;256m\033[38;5;6m\xe2\x96\x88\033[40;36m\033[38;5;6m\xe2\x96\x88\033[0m"
Si quieres comprobar cuál es el color ANSI xterm-256color que mejor se ajusta a tu color de fondo real, podrías utilizar este script (versión modificada del se encuentra aquí ):
#!/bin/bash
for fgbg in 38 48 ; do #Foreground/Background
for color in {0..256} ; do #Colors
#Display the color
echo -e "\033[${fgbg};5;${color}m ${color}\t\033[0m"
done
echo #New line
done
exit 0