Ich habe in Bash viele Escape-Sequenzen gefunden, die mit beginnen \033]
, aber was sind diese Sequenzen und warum beginnen sie mit \033]
?
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 einstellen4x
.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:
Sie können die Befehle zB mit Bash testen. Mit dem
-e
Flagecho
akzeptiert der eingebaute Befehl\033
eine Darstellung desESC
Zeichens.ZB druckt dies eine Begrüßung in Farbe in der Mitte des Bildschirms und eine andere normalerweise an der ursprünglichen Cursorposition:
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.Außerdem gibt es
ESC ( A
(und andere Buchstaben), die nationale Zeichensätze auf einigen Terminals auf eine möglicherweise komische Weise festlegen .quelle
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ährendOSC
Zeichenfolgen zulässig sind. Abgesehen von der Syntax hat das Komitee, das diesen Standard erstellt hat, Anwendungen fürAPC
und in Betracht gezogen,PM
die sich vonDCS
und unterschiedenOSC
.quelle
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).
quelle
Die in den anderen Antworten beschriebenen "Escape-Sequenzen" hängen davon ab, welchen Terminaltyp Sie haben (meistens "ANSI" oder Derivate / ähnliche).
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
wird
.test.
mittest
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... wobei die Werte hexadezimal angezeigt werden (aufgrund von "x").
quelle