Dies sind ANSI-Escape-Sequenzen . Dieser Link führt zu einer Tabelle mit Farbcodes, aber es gibt auch andere interessante Dinge auf dieser Wikipedia-Seite. Nicht alle funktionieren (zB) auf einer normalen Linux-Konsole.
Das ist falsch:
\033]00m\] # white
0
Setzt das Terminal auf seine Standardeinstellung zurück (die wahrscheinlich weiß ist). Der tatsächliche Code für den weißen Vordergrund ist 37. Außerdem ist die maskierte schließende Klammer am Ende ( \]
) nicht Teil der Farbsequenz (in den letzten Absätzen unten finden Sie Erläuterungen zu ihrem Zweck beim Festlegen einer Eingabeaufforderung).
Beachten Sie, dass Sie bei einigen GUI-Terminals ein benutzerdefiniertes Farbschema festlegen können. Dies wirkt sich auf die Ausgabe aus.
Es gibt hier eine Liste mit 7 Vordergrund- und 7 Hintergrundfarben, die ich noch nicht gesehen habe, aber sie scheinen zu funktionieren:
# 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
Wenn Sie ein 256-Farben-GUI-Terminal haben (ich denke, die meisten von ihnen sind jetzt), können Sie Farben aus dieser Tabelle anwenden:
Die ANSI-Sequenz, in der diese ausgewählt werden, beginnt mit der Nummer in der unteren linken Ecke 38;5;
für den Vordergrund und 48;5;
für den Hintergrund, dann für die Farbnummer. Beispiel:
echo -e "\\033[48;5;95;38;5;214mhello world\\033[0m"
Gibt mir ein hellorange auf tan (das heißt, die Farbkarte ist grob angenähert).
Sie können die Farben in dieser Tabelle 1 so sehen, wie sie auf Ihrem Terminal erscheinen würden:
#!/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
Die Ausgabe ist selbsterklärend.
Einige Systeme setzen die Variable $ TERM auf, xterm-256color
wenn Sie sich über einen Shell-Code in einem 256-Farben-Terminal befinden /etc/profile
. Bei anderen sollte es Ihnen möglich sein, Ihr Terminal für diese Verwendung zu konfigurieren. Dadurch erfahren TUI-Anwendungen, dass 256 Farben vorhanden sind, und Sie können Folgendes hinzufügen ~/.bashrc
:
if [[ "$TERM" =~ 256color ]]; then
PS1="MyCrazyPrompt..."
fi
Beachten Sie, dass Sie beim Verwenden von Farb-Escape-Sequenzen in der Eingabeaufforderung diese in \
eckigen Klammern mit Escape-Zeichen ( vorangestellt) einschließen sollten :
PS1="\[\033[01;32m\]MyPrompt: \[\033[0m\]"
Beachten Sie, dass das [
Innere der Farbsequenz nicht maskiert wird, die umschließenden jedoch. Der Zweck des letzteren ist es, der Shell anzuzeigen, dass die eingeschlossene Sequenz nicht zur Zeichenlänge der Eingabeaufforderung zählt. Wenn diese Anzahl falsch ist, passieren seltsame Dinge, wenn Sie durch den Verlauf zurückscrollen, z. B. wenn sie zu lang ist, wird die überschüssige Länge der zuletzt gescrollten Zeichenfolge an Ihre Eingabeaufforderung angehängt und Sie können keine Rücktaste drücken es (es wird genauso ignoriert wie die Eingabeaufforderung).
Beachten Sie auch, dass Sie die Ausgabe eines Befehls, der bei jeder Verwendung der Eingabeaufforderung ausgeführt werden soll (anstatt nur einmal, wenn die Eingabeaufforderung festgelegt wird), als Literalzeichenfolge mit einfachen Anführungszeichen festlegen sollten, z.
PS1='\[\033[01;32m\]$(date): \[\033[0m\]'
Dies ist zwar kein gutes Beispiel, wenn Sie mit der Verwendung von speziellen \d
oder \D{format}
sofortigen Escape- Anweisungen von bash zufrieden sind. Diese sind nicht Gegenstand der Frage, finden Sie jedoch man bash
unter PROMPTING
. Es gibt verschiedene andere nützliche Fluchten, wie zum Beispiel \w
für das aktuelle Verzeichnis, \u
für den aktuellen Benutzer usw.
1. Der Hauptteil dieser Tabelle, Farben 16 - 231 (beachten Sie, dass sie nicht in numerischer Reihenfolge vorliegen), ist ein RGB-Farbwürfel mit den Abmessungen 6 x 6 x 6. "Farbwürfel" bezieht sich auf die Tatsache, dass ein RGB-Farbraum unter Verwendung eines dreidimensionalen Arrays dargestellt werden kann (mit einer Achse für Rot, einer für Grün und einer für Blau). Jede Farbe im Würfel kann hier als Koordinaten in einem 6 x 6 x 6-Array dargestellt und der Index im Diagramm folgendermaßen berechnet werden:
16 + R * 36 + G * 6 + B
Die erste Farbe im Würfel am Index 16 im Diagramm ist schwarz (RGB 0, 0, 0). Sie können diese Formel im Shell-Skript verwenden:
#!/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"
\]
hier tatsächlich nicht Teil der Farbsequenz ist. Es dient einem bestimmten Zweck, Eingabeaufforderungen festzulegen (dazu habe ich am Ende meiner Antwort einige Absätze hinzugefügt). "Es wäre schön, wenn es auch eine besser lesbare Form gäbe." -> das Ausschneiden und Einfügen in Ihrer eigenen Antwort ist eine Möglichkeit, dies zu tun.