Kurze Antwort: Verwenden Sie keine "zusammengesetzten" Farbcodes wie \033[49;36m
, \033[0;42m\033[0;36m
sondern separate Farbanweisungen wie . Der Unterschied wird deutlich, wenn man die Ausgabe dieser beiden Befehle vergleicht:
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"
(Beachten Sie, dass meine Version von bash nicht verarbeitet werden konnte \u2588
, sodass ich auf die hexadezimale Variante zurückgreifen musste \xe2\x96\x88
).
Vorschlag für zukünftigen Code:
Erstellen Sie eine Datei (zum Beispiel in ~/.bash_color_definitions
) mit folgendem Inhalt:
# 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'
Und geben Sie es bei jedem Bash-Start source ~/.bash_color_definitions
in Ihr .bashrc
oder ein .bash_profile
. Dann fang an, besser lesbaren Code zu produzieren:
echo -e "$BG_BLACK$FG_CYAN\xe2\x96\x88$BG_GRAY$FG_CYAN\xe2\x96\x88$COLOR_RESET"
BEARBEITEN:
Es stellte sich heraus, dass der Code in meiner Antwort tatsächlich den Hintergrund zurücksetzte (wie Erik in den Kommentaren vermerkte). Nach einigem Testen sieht es so aus, als ob das Mac Terminal die Vordergrund- / Hintergrundfarben etwas anders "mischt", wenn Sie versuchen, einen Farbcode zu verwenden 49
, dh die "Standardhintergrundfarbe".
iTerm.app zum Beispiel verhält sich nicht so, so dass Sie leicht zwischen Terminals wechseln können, wenn Sie möchten.
Eine gültige Lösung besteht jedoch darin, die Hintergrundfarbe vollständig anzugeben (dh nicht nur verwenden 49;36m
, sondern verwenden , 47;36m
wenn Ihr Hintergrund weiß ist). Oder besser die xterm-256color
Farbangaben verwenden; das ist \033[38;5;___m
für den Vordergrund und \033[48;5;___m
für die Hintergrundfarben (Ersetzen des Unterstrichs durch eine Zahl in 0-255). Zumindest auf meinem Computer erzeugt dies dann konsistente Farben:
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"
Wenn Sie überprüfen möchten, welche ANSI xterm-256-Farbe am besten zu Ihrer tatsächlichen Hintergrundfarbe passt, können Sie dieses Skript verwenden (geänderte Version von der hier gefundenen ):
#!/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
\033[0;36m
, bei dem die 0 den zuvor angegebenen Hintergrundstil löscht, sodass beide Blöcke gleich aussehen, aber auch dieselbe Hintergrundfarbe haben (Standard)49
) verlassen, wenn ich Sie wäre. Ich habe keine Ahnung, was Ihr Skript tatsächlich macht und warum dieser winzige Farbunterschied für Sie so wichtig ist (zumal Sie nicht einmal 256 Farben verwenden und es höchstwahrscheinlich nicht alle Computer kalibriert sind), aber wenn Sie nicht spezifizieren können Mit einer deutlichen Hintergrundfarbe wechseln Sie am besten die Terminal-Apps.