ANSI-Escape-Sequenzen bestehen aus einer Folge von Zeichen, die mit dem Escape-Zeichen (Zeichen 27) beginnen. Das nächste Zeichen ist häufig (wenn auch nicht immer) eine offene eckige Klammer: [
Der Befehl echo kann Escape-Zeichen senden, wenn Sie Escape-Zeichen angeben -e
und verwenden \e
.
Der ANSI-Standard definiert 8 Farben und einen Helligkeitsmodus, der insgesamt 16 Möglichkeiten bietet. Die Reihenfolge ist:
\e[<number>m
Wo <number>
ist einer von:
Vordergrund:
- 30 Schwarz
- 31 Rot
- 32 Grün
- 33 Gelb
- 34 Blau
- 35 Magenta
- 36 Cyan
- 37 Weiß
Hintergrund:
- 40 Schwarz
- 41 Rot
- 42 Grün
- 43 Gelb
- 44 Blau
- 45 Magenta
- 46 Cyan
47 Weiß
0 Alles zurücksetzen
- 1 Fett
So machen Sie Ihren Vordergrund rot und Ihren Hintergrund gelb:
$ echo -e "\e[31m\e[43m"
Und um fett zu machen:
$ echo -e "\e[1m"
Natürlich können Sie sie alle miteinander kombinieren:
$ echo -e "\e[31m\e[43m\e[1m"
Es gibt noch viele andere Escape-Codes, um andere Dinge zu tun.
Zum Beispiel - löschen Sie den Bildschirm und bewegen Sie den Cursor nach links oben:
$ echo -e "\e[2J\e[1;1H"
Was beim Ändern der Farbe nützlich ist:
$ echo -e "\e[31m\e[43m\e[1m\e[2J\e[1;1H"
Dadurch werden die Farben geändert, der Bildschirm gelöscht und der Cursor oben links positioniert. Na ja, fast oben links. Echo setzt einen Wagenrücklauf ein und bewegt sich so eine Linie hinunter. Sie können -n
Echo hinzufügen , um dies zu verhindern, wenn Sie pingelig sind.
Wenn Sie alles durcheinander bringen und nicht sehen können, was Sie eingeben, können Sie die Terminalfarben auf Normal zurücksetzen, indem Sie auf drücken:
Ctrl+v
[
0
m
Return
Was Sie hoffen, ist die Eingabeaufforderung. Es wird sich um einen unbekannten Befehl drehen, aber Sie werden sehen können, was Sie wieder tun.
echo -ne '\e[31;43m'
(anstelle des obigenecho -e "\e[31m\e[43m"
).Beachten Sie, dass moderne Xterms 32-Bit-Farben unterstützen!
Einfaches Beispiel. Um einen schönen dunkelvioletten Hintergrund (hey, jeder für sich) mit dem Wert # 53186f festzulegen, gehen Sie wie folgt vor:
Beachten Sie, dass dadurch sofort die Farbe des gesamten Fensters und nicht nur des nachfolgenden Texts geändert wird. Dies ist besonders nützlich, um ein Fenster offensichtlich anders zu machen, nachdem es (zum Beispiel) an einen Server gesendet wurde. Fügen Sie das obige 'Echo' in Ihre .bashrc-Datei ein, und Ihr Terminal ändert automatisch die Farben, wenn Sie sich bei diesem Server anmelden.
Sie können STUNDEN im Internet damit verbringen, danach zu suchen - die meisten Dokumente sprechen nur über die ursprünglichen 16 ANSI-Farben.
Quellen: http://www.steike.com/code/xterm-colors/ und http://rtfm.etla.org/xterm/ctlseq.html (siehe unter "Betriebssystemsteuerung")
Bitte beachten Sie: Die oben angegebene Escape-Sequenz gilt für XTerms und funktioniert möglicherweise nicht für andere Implementierungen von "XTerm-ähnlichen" Fenster-Terminal-Emulatoren, die möglicherweise wie ein XTerm "aussehen". Beispielsweise haben "gnome-terminal" oder "konsole" unterschiedliche Escape-Sequenzen oder implementieren möglicherweise überhaupt keine Farbänderung.
quelle
Ja. ANSI-Terminals unterstützen ANSI-Escape-Codes . Jeder
Control Sequence Introducer
(CSI
) Code im folgenden Format:Das Ascii-Zeichen
27
(dasESC
Zeichen) oder1b
hexadezimal, gefolgt von einer linken eckigen Klammer und einem Buchstaben, der die zu verwendende Aktion angibt.Beachten Sie, dass eine Liste der
;
getrennten Parameter direkt vor dem<<<CODE>>>
Parameter angegeben werden kann.Jetzt verwenden Farben eine Untergruppe von
CSI
Codes, dieSelect Graphic Rendition
Codes. Diese sind in der Form:Der
SGR
Code wird als Parameter übergebenCSI
. Relevant für Ihre Frage sind dieSGR
Codes 30-49. Mit den Codes 30-39 wird die Vordergrundfarbe eingestellt. Mit den Codes 40-49 wird die Hintergrundfarbe eingestellt.Die Codes 38 und 48 sind Sondercodes. Mit diesen können Sie RGB-Werte verwenden. Das Format für diese ist:
Hinweis: alternative Verwendungen umfassen
\x1b[<3 or 4>8;5;<web safe color index>m
. Bei dieser Verwendung gibt es eine völlig andere Farbcodierung. Weitere Informationen finden Sie über den Link oben in dieser Antwort.Mit den Codes 39 und 49 werden die Vordergrund- und Hintergrundfarben auf ihre Standardwerte gesetzt, die Terminal für Terminal festgelegt werden.
In der Praxis unterscheiden sich die Farben 30-37 40-47 geringfügig von den Angaben auf den Etiketten.
Um helle Farben zu erhalten, verwenden Sie die SGI für Fettdruck
1
. Fett ist ein irreführender Name. Die Schrift wird dadurch nicht fett dargestellt. Tatsächlich wird die Helligkeit des Texts erhöht. Mit Fettdruck werden die Farben:Hinweis: Die letzten beiden Farbblöcke sind sowohl für den Vorder- als auch für den Hintergrund relevant (
<index> + (30 or 40)
).Verwenden Sie
SGR
0, um alle Stile zu entfernen (zurück zum Standard- / Normalmodus) .CSI
Codes sind nicht alle grafisch. Zum BeispielESC[2J
wird Ihr Terminal gelöscht.ESC[<y>;<x>H
Setzt die Cursorposition (1-indiziert). Weitere Informationen finden Sie im Wikipedia-Artikel.Hinweis: Um diese zu testen, verwenden Sie
echo -e
oderprintf
.quelle
HINWEIS: Das "^ [" ist das Escape-Zeichen und wird mit STRG-V, STRG- [und ^ G eingefügt. Es ist ein Glockenzeichen, das mit STRG-V, STRG-G eingefügt wird
Der folgende Block befindet sich in meinem .bash_profile und stellt sicher, dass meine xterms auf diesem System IMMER weiß auf schwarz sind, auch nachdem ich mich bei einem anderen System angemeldet habe, das möglicherweise meine Farben geändert hat.
quelle
überprüfen Sie auch ein Projekt ScriptEchoColor
es vollständig in Bash - Skripte gemacht
hat Pakete für Ubuntu hier
aber diese Skripte können auf jeder Distribution installiert werden , wenn Sie wissen , wie man (letzte von seinem Git heruntergeladen werden kann).
Sie können verkürzte oder erweiterte Farbnamen verwenden, z.
eine Probe:
Schauen Sie sich auch unbedingt xtermcontrol an , um eine umfassendere Kontrolle über das xterm selbst (nicht nur die Zeichen) zu erhalten.
quelle
Unter den vielen ANSI- CSI-Codes befindet sich einer mit der Bezeichnung SGR oder Select Graphic Rendition. Hierbei handelt es sich um ESC,,
[
-Parameter,m
wobei die Parameter eine oder mehrere Ganzzahlen im ASCII-Format sind, die durch Semikolons getrennt sind. Die vielen verschiedenen SGR-Parameter sind oben auf der Wikipedia-Seite aufgeführt (obwohl sie nicht für alle Einzelheiten gelten).Einige Parameter, wie beispielsweise
1
(fett oder erhöhte Intensität) und31
(roter Text) sind eigenständige, und können einzeln oder in Kombination verwendet werden, wie inESC[31m
oderESC[1;31m
Standard rot und fett roten Vordergrundtext zu geben, respectively.Andere nehmen Parameter selbst, die einfach nach dem Code als durch Semikolons getrennte Zahlen angegeben werden. So
ESC[38;5;219m
würde beispielsweise Vordergrundtext in der erweiterten Farbe Nummer 219ESC[38;2;150;100;50m
angezeigt und in der Farbe mit den RGB-Werten 150, 100, 50 angezeigt. In diesem Fall38
ist dies der Befehl "Erweiterte Vordergrundfarbe festlegen", dem immer gefolgt wird ein Unterbefehl. Der Unterbefehl akzeptiert2
drei Parameter, die Werte der roten, grünen und blauen Komponenten. Im Gegensatz dazu5
nimmt der Unterbefehl nur einen weiteren Wert an, eine Zahl von 0 bis 255, die eine Farbe aus einer Tabelle angibt, mit der das Terminal konfiguriert ist.Die folgende Shell-Funktion kann für die Verwendung dieser Codes nützlich sein:
Du kannst es so benutzen:
Beachten Sie, dass
sgr()
der SGR-Code 0 standardmäßig verwendet wird , wenn Sie keine Parameter angeben. Dies bedeutet, dass alle Attribute deaktiviert werden und der Text auf den Standardwert für dieses Terminal zurückgesetzt wird.quelle
ESC[38
...m
undESC[38
...m
(hängt von Ihrer Informationsquelle ab - die ultimative davon ist, glaube ich , itu.int/rec/T-REC-T.416-199303-I ), ansonsten reserviertes Zeichen:
(um die Parameterelemente zu trennen ), damit das;
nur zwischen kompletten Parameterstrings verwendet wird - also geschriebenESC[38;2;150;100;50m
werden sollESC[38:2::150:100:50m
...2
und dem150
- da mir noch niemand bekannt ist, welcher Wert dort hineingehen soll, soll der leere Standard verwendet werden - wird aber oft übersehen und die Verwendung nur;
als Trennzeichen macht es unmöglich, die Informationen zuverlässig gemäß der Spezifikation zu verarbeiten.