Risposta breve: non utilizzare codici colore "composti" come 3[49;36m
, utilizzare invece istruzioni di colore separate come 3[0;42m3[0;36m
.
La differenza può essere ben vista confrontando l'output di questi due comandi:
echo -e "3[0;42;36m\xe2\x96\x883[0;49;36m\xe2\x96\x88"
echo -e "3[0;42m3[0;36m\xe2\x96\x883[0;49;36m\xe2\x96\x88"
(nota che la mia versione di bash non poteva elaborare \u2588
, quindi ho dovuto ricorrere alla variante esadecimale \xe2\x96\x88
).
Suggerimento per il codice futuro:
Crea un file (ad esempio in ~/.bash_color_definitions
) con il seguente contenuto:
# Setup some colors to use later in interactive shell or scripts
# Color reset:
export COLOR_RESET='3[0m' # reset color
# foreground colors
export FG_WHITE='3[1;37m'
export FG_BLACK='3[0;30m'
export FG_BLUE='3[0;34m'
export FG_LIGHT_BLUE='3[1;34m'
export FG_GREEN='3[0;32m'
export FG_LIGHT_GREEN='3[1;32m'
export FG_CYAN='3[0;36m'
export FG_LIGHT_CYAN='3[1;36m'
export FG_RED='3[0;31m'
export FG_LIGHT_RED='3[1;31m'
export FG_PURPLE='3[0;35m'
export FG_LIGHT_PURPLE='3[1;35m'
export FG_BROWN='3[0;33m'
export FG_YELLOW='3[1;33m'
export FG_GRAY='3[1;30m'
export FG_LIGHT_GRAY='3[0;37m'
# background colors
export BG_WHITE='3[1;47m'
export BG_BLACK='3[0;40m'
export BG_BLUE='3[0;44m'
export BG_LIGHT_BLUE='3[1;44m'
export BG_GREEN='3[0;42m'
export BG_LIGHT_GREEN='3[1;42m'
export BG_CYAN='3[0;46m'
export BG_LIGHT_CYAN='3[1;46m'
export BG_RED='3[0;41m'
export BG_LIGHT_RED='3[1;41m'
export BG_PURPLE='3[0;45m'
export BG_LIGHT_PURPLE='3[1;45m'
export BG_BROWN='3[0;43m'
export BG_YELLOW='3[1;43m'
export BG_GRAY='3[1;40m'
export BG_LIGHT_GRAY='3[0;47m'
E caricatelo su ogni inizio di bash inserendo source ~/.bash_color_definitions
nel .bashrc
o .bash_profile
. Quindi inizia a produrre un codice più leggibile come questo:
echo -e "$BG_BLACK$FG_CYAN\xe2\x96\x88$BG_GRAY$FG_CYAN\xe2\x96\x88$COLOR_RESET"
Modifica
È venuto fuori che il codice nella mia risposta ha effettivamente resettato lo sfondo (come notato da Erik nei commenti).
Dopo un po 'di test, sembra che il terminale Mac "mescoli" i colori di primo piano / sfondo un po' diverso quando si tenta di utilizzare il codice colore 49
, cioè il "colore di sfondo predefinito".
Per esempio iTerm.app non si comporta in questo modo, quindi puoi facilmente cambiare terminale, se lo desideri.
Una soluzione valida, tuttavia, è specificare completamente il colore di sfondo (ad esempio, non utilizzare solo 49;36m
, utilizzare 47;36m
se lo sfondo è bianco). O meglio usare le specifiche di colore xterm-256color
; questo è 3[38;5;___m
per il primo piano e 3[48;5;___m
per i colori di sfondo (sostituendo il trattino basso con un numero in 0-255). Almeno sul mio computer, questo produce colori coerenti:
echo -e "3[48;5;256m3[38;5;6m\xe2\x96\x883[40;36m3[38;5;6m\xe2\x96\x883[0m"
Se vuoi verificare quale colore xterm-256 ANSI si adatta meglio al tuo reale colore di sfondo, puoi usare questo script (versione modificata da quella trovato qui ):
#!/bin/bash
for fgbg in 38 48 ; do #Foreground/Background
for color in {0..256} ; do #Colors
#Display the color
echo -e "3[${fgbg};5;${color}m ${color}\t3[0m"
done
echo #New line
done
exit 0