Antworten:
Die Saite ist eigentlich \033[
und das ist nicht die ganze Sache.
Nach dieser öffnenden Klammer folgt eine Reihe von Zahlen und Symbolen. Diese Zeichenfolge wird als Escape-Sequenz bezeichnet und dient unter anderem zur Steuerung des Cursors und der Textfarbe der Konsole.
Nicht druckbare Escape-Sequenzen müssen eingeschlossen werden
\[\033[ and \]
Wenn die Escape-Sequenz die Textfarbe steuert, folgt ein m
.
Hier ist eine Tabelle für die Farbsequenzen:
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
Wenn Sie also möchten, dass die Eingabeaufforderung Ihrer Konsole blau ist, verwenden Sie die folgende Escape-Sequenz (im Dateinamen, den ich vergesse):
\[\033[34m\]
(Beachten Sie die m
)
Diese Escape-Sequenz steuert jedoch nicht nur die Farbe. Es kann auch die Cursorbewegung steuern. Hier ist eine Tabelle / Liste mit den Bewegungscodes und wie sie funktionieren:
Positionieren Sie den Cursor:
\033[<L>;<C>H
Oder
\033[<L>;<C>f
setzt den Cursor auf Zeile L und Spalte C.
Bewegen Sie den Cursor in N Zeilen nach oben:
\033[<N>A
Bewegen Sie den Cursor N Zeilen nach unten:
\033[<N>B
Bewegen Sie den Cursor in N Spalten vorwärts:
\033[<N>C
Bewegen Sie den Cursor in N Spalten nach hinten:
\033[<N>D
Lösche den Bildschirm und gehe zu (0,0):
\033[2J
Löschen bis zum Zeilenende:
\033[K
Cursorposition speichern:
\033[s
Cursorposition wiederherstellen:
\033[u
Beachten Sie jedoch, dass die letzten beiden in dem von Ihnen verwendeten Terminalemulator möglicherweise nicht funktionieren. Anscheinend nur xterm
und nxterm
benutze diese beiden Sequenzen.
Ein Beispiel für eine dieser Escape-Sequenzen: Angenommen, ich möchte meinen Cursor in Zeile 3, Spalte (Zeichen) 9 positionieren. Dafür würde ich verwenden
\[033\[3;9H]
(Ich gehe davon aus, dass Spalte 0 die erste Position ist, das wäre also das 8. Zeichen).
Quelle: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html (lesen Sie auch 6.2)
Allgemeine Lektüre: http://ascii-table.com/ansi-escape-sequences.php
[2K
löscht die gesamte Zeile vor und nach dem Cursor. Eine viel bessere Quelle wäre der Wikipedia-Artikel oder Sie könnten direkt zu ECMA-48 , Abschnitt 8.3.117 SGR - Select Graphic Rendition gehen .
0;
in den Farbsequenzen unnötig. Das macht nur die Hintergrundfarbe zum Standard, bevor der Vordergrund eingestellt wird. Sie können den Hintergrund auch mit einstellen 4x
.
Sie sind Steuerbefehle für das Terminal.
Terminals waren ursprünglich eher dumme Geräte, die an eine serielle Schnittstelle angeschlossen waren, und nicht die schicke GUI-Software mit mehreren Registerkarten und Menüs, die wir jetzt haben. Da sie nur einen Strom von Zeichen (Bytes) erhielten, gab es keine klare Trennung zwischen Daten (was auf dem Bildschirm gedruckt werden soll) und Befehlen (wie es gedruckt werden soll). Stattdessen werden die Befehle mit speziellen Steuerzeichen dargestellt.
Die offensichtlichen Steuerzeichen sind Zeilenvorschub (Zeilenvorschub), Rücktaste und Glockenton, aber spezifischere Befehle werden als Folgen von Zeichen angegeben, die mit dem ESC
Zeichen beginnen (Code 27 in Dezimal, 0x1b in Hex oder 033 in Oktal). Es wird oft als ^[
oder \033
wie in Ihrem Beispiel dargestellt.
Die Sequenz ESC [
wird als CSI oder Control Sequence Introducer bezeichnet und startet einen Befehl mit optionalen numerischen Parametern, der in der Regel mit einem Buchstaben endet, der den Hauptbefehl definiert. Die meisten gebräuchlichen Escape-Sequenzen fallen in diese Klasse.
Listen der Escape-Codes finden Sie z. B. in der console_codes(4)
Manpage und auf der Wikipedia-Seite für ANSI-Escape-Codes .
Einige Beispiele:
ESC [ 4 A move cursor 4 lines up (4 can be any number)
ESC [ 5 B move cursor 5 lines down
ESC [ 2 K erase current line
ESC [ 30;46 m set black text (30) on cyan background (46)
ESC [ 0 m reset color and attributes
Sie können die Befehle zB mit Bash testen. Mit dem -e
Flag echo
akzeptiert der eingebaute Befehl \033
eine Darstellung des ESC
Zeichens.
ZB druckt dies eine Begrüßung in Farbe in der Mitte des Bildschirms und eine andere normalerweise an der ursprünglichen Cursorposition:
echo -e '\033[s\033[12;30f\033[30;46m Hello! \033[0m\033[uhello'
Die Sequenz, ESC ]
die Sie erwähnt haben, ist der OSC- oder Betriebssystembefehl, der hauptsächlich im Befehl zum Festlegen des Fenstertitels verwendet wird, xterm
und andere, z.
echo -e '\033]0;new window title\a'
Außerdem gibt es ESC ( A
(und andere Buchstaben), die nationale Zeichensätze auf einigen Terminals auf eine möglicherweise komische Weise festlegen .
Mit einem Escape-Zeichen und einer eckigen Klammer rechts escape]
wird ein Betriebssystembefehl ( OSC
) eingeleitet.
Es befindet sich in ECMA-48 und Sie können eine Zusammenfassung der von xterm in XTerm- Steuersequenzen verwendeten Steuersequenzen lesen , z. B. um den Titel des Terminalfensters zu ändern.
Escape-Sequenzen können mit verschiedenen Zeichen beginnen. Die C1 (8-Bit) Steuerzeichen Abschnitt in XTerm- Steuersequenzen einige von denen erwähnt: CSI
(die Sie als sehen escape[
, APC
, DCS
, PM
. Der Grund für das unterschiedliche (zweite) Zeichen ist , weil das Paar (Flucht- und ]
) mit einem verbunden ist Ein-Byte-Steuerzeichen, das für verschiedene Arten von Escape-Sequenzen verwendet wird.
Wenn Sie die Spezifikation durchlesen, werden Sie feststellen, dass CSI
für Steuerelemente mit numerischen Parametern verwendet wird, während OSC
Zeichenfolgen zulässig sind. Abgesehen von der Syntax hat das Komitee, das diesen Standard erstellt hat, Anwendungen für APC
und in Betracht gezogen, PM
die sich von DCS
und unterschieden OSC
.
Diese werden als ANSI-Escape-Codes bezeichnet und auf der Manpage für console_codes aufgelistet . Sie sind nicht Bash-spezifisch, sondern funktionieren in jeder Konsolenanwendung, solange das Terminal sie unterstützt (die meisten Terminalemulatoren unterstützen sie).
Die in den anderen Antworten beschriebenen "Escape-Sequenzen" hängen davon ab, welchen Terminaltyp Sie haben (meistens "ANSI" oder Derivate / ähnliche).
$ echo $TERM
xterm
Wenn Sie Skripte schreiben möchten, die (etwas) UNABHÄNGIG vom Terminal sind, aber dennoch zB Farbe und andere Besonderheiten verwenden, dann schauen Sie sich den Inhalt von an man terminfo
.
z.B
$ echo -n ".";tput setb 6;tput setf 4;echo -n "test";tput sgr0;echo "."
wird .test.
mit test
gelblichem Hintergrund und roter Vordergrundfarbe gedruckt , und dies funktioniert für JEDES Terminal, das tatsächlich in der Lage ist, Farben auf die gleiche Weise zu verwenden.
Um zu sehen, was tatsächlich gedruckt wird, leiten Sie es od -t x1z
wie in
$ tput sgr0 | od -t x1z
0000000 1b 28 42 1b 5b 6d >.(B.[m<
0000006
... wobei die Werte hexadezimal angezeigt werden (aufgrund von "x").