it-swarm.com.de

Welche Arten von Sequenzen sind Escape-Sequenzen, die mit "\ 033]" beginnen?

Ich habe in Bash viele Escape-Sequenzen gefunden, die mit \033] beginnen, aber was sind diese Sequenzen und warum beginnen sie mit \033]?

14
Sessho

Die Zeichenfolge ist tatsächlich \033[ und das ist nicht das Ganze.

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 in \[\033[ and \] eingeschlossen werden

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 verwenden nur xterm und nxterm diese beiden Sequenzen.

Und ein Beispiel mit einer 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

Wikipedia: https://en.wikipedia.org/wiki/ANSI_escape_code

25
TheWanderer

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, beginnend mit dem Zeichen ESC (Code 27 in Dezimalzahl, 0x1b in Hexadezimalzahl oder 033) oktal). Es wird oft als ^[ oder \033 dargestellt, wie in Ihrem Beispiel.

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 können z.B. in der Manpage console_codes(4) 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 mit z. Bash. Mit dem Flag -e akzeptiert der integrierte Befehl echo\033 als Darstellung des Zeichens ESC.

Z.B. Dadurch wird eine Begrüßung in Farbe in der Mitte des Bildschirms und eine Begrüßung normalerweise an der ursprünglichen Cursorposition gedruckt:

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 in xterm und anderen verwendet wird, z.

echo -e '\033]0;new window title\a'

Dann gibt es auch ESC ( A (und andere Buchstaben), die nationale Zeichensätze auf einigen Terminals auf eine möglicherweise komische Weise setzen .

13
ilkkachu

Diese heißen ANSI-Escape-Codes und sind in der Manpage für console_codes aufgeführt. Sie sind nicht Bash-spezifisch, sondern funktionieren in jeder Konsolenanwendung, sofern das Terminal sie unterstützt (die meisten Terminalemulatoren unterstützen sie).

7
Joey Marianer

Escape gefolgt von einer eckigen Klammer escape_]_ wird verwendet, um einen Betriebssystembefehl einzuführen (OSC).

Es ist in ECMA-48 und Sie können eine Zusammenfassung der von xterm verwendeten Kontrollsequenzen in XTerm-Kontrollsequenzen lesen zB um den Titel des Terminalfensters zu ändern.

Escape-Sequenzen können mit verschiedenen Zeichen beginnen. Der Abschnitt C1 (8-Bit) Steuerzeichen in den XTerm-Steuersequenzen erwähnt einige davon: CSI (was Sie als sehen escape[, APC, DCS, PM. Der Grund für das andere (zweite) Zeichen ist, dass das Paar (Escape und _]_) ist einem Einzelbyte-Steuerzeichen zugeordnet, das für verschiedene Typen der Escape-Sequenz 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ässt. Über die Syntax hinaus hat das Komitee, das diesen Standard erstellt hat, APC und PM verwendet, die sich von DCS und OSC unterschieden.

6
Thomas Dickey

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 z. Farbe und andere Besonderheiten, dann schauen Sie sich den Inhalt von man terminfo an.

z.B.

$ echo -n ".";tput setb 6;tput setf 4;echo -n "test";tput sgr0;echo "."

wird .test. mit test mit gelblichem Hintergrund und roter Vordergrundfarbe drucken, und dies wird für JEDES Terminal funktionieren, das tatsächlich in der Lage ist, Farben auf die gleiche Weise zu verwenden.

Um zu sehen, was tatsächlich gedruckt wird, fügen Sie es wie in od -t x1z ein

$ tput sgr0 | od -t x1z  
0000000 1b 28 42 1b 5b 6d                                >.(B.[m<  
0000006

... wobei die Werte hexadezimal angezeigt werden (aufgrund von "x").

1
Hannu