Che tipo di sequenze sono sequenze di escape che iniziano con "\ 033]"


19

Ho trovato molte sequenze di escape in Bash a partire \033], ma quali sono queste sequenze e perché iniziano \033]?

Risposte:


25

La stringa è in realtà \033[e non è tutto.

Dopo quella parentesi di apertura arriva una serie di numeri e simboli. Questa stringa è nota come sequenza di escape e viene utilizzata, tra le altre cose, per controllare il cursore e il colore del testo della console.

le sequenze di escape non stampabili devono essere racchiuse in \[\033[ and \]

Se la sequenza di escape controlla il colore del testo, sarà seguita da un m.

Ecco una tabella per le sequenze di colori:

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   

Quindi, se vuoi che il tuo prompt della console sia blu, useresti la seguente sequenza di escape (nel nome del file che sto dimenticando):

\[\033[34m\]

(Nota il m)

Questa sequenza di escape non controlla solo il colore, tuttavia. Può anche controllare il movimento del cursore. Ecco una tabella / elenco con i codici di movimento e come funzionano:

  • Posiziona il cursore:

    \033[<L>;<C>H

    O

    \033[<L>;<C>f

    posiziona il cursore sulla riga L e colonna C.

  • Sposta il cursore su N righe:

    \033[<N>A
  • Sposta il cursore in basso su N righe:

    \033[<N>B
  • Sposta il cursore in avanti su N colonne:

    \033[<N>C
  • Sposta il cursore indietro di N colonne:

    \033[<N>D
  • Cancella lo schermo, passa a (0,0):

    \033[2J
  • Cancella fino alla fine della riga:

    \033[K
  • Salva posizione cursore:

    \033[s
  • Ripristina posizione cursore:

    \033[u

Basta essere consapevoli del fatto che gli ultimi due potrebbero non funzionare nell'emulatore di terminale che si utilizza. Apparentemente, solo xterme nxtermusa quelle due sequenze.

Ed esempio usando una di queste sequenze di escape: diciamo che voglio posizionare il cursore sulla riga 3, colonna (carattere) 9. Per questo, vorrei usare

\[033\[3;9H]

(Suppongo che la colonna 0 sia la prima posizione, quindi sarebbe l'ottavo carattere).

Fonte: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html (leggi anche 6.2)

Lettura più generale: http://ascii-table.com/ansi-escape-sequences.php

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


2
considera anche il collegamento a en.wikipedia.org/wiki/ANSI_escape_code
cat

2
Nota che '\ 033' è il carattere ESCAPE in ottale, quindi potrebbe essere dato in decimale (27) o esadecimale (0x1B). Esistono altri modi comuni di scrivere ESCAPE, ad esempio '^ [' negli script di shell, "\ e" in bindkey, ecc.
jamesqf

1
Si noti che un certo numero di voci in quella tabella sono fuorvianti o inesatte: grassetto, sbiadito, sottolineato ecc. Possono essere impostati e ripristinati indipendentemente dal colore e sono anche ripristinati di 0 insieme ai colori; c'è un intero insieme separato di codici (40–49) per lo sfondo, e 7 invece scambia primo piano e sfondo; ESC [2Kcancella l'intera riga sia prima che dopo il cursore. Una fonte molto migliore sarebbe l'articolo di Wikipedia, oppure potresti andare direttamente a ECMA-48 , sezione 8.3.117 SGR - Seleziona rappresentazione grafica .
deltab,

La frase "carattere 'm alla fine di ciascuna delle seguenti frasi viene usata come carattere di arresto" sul post di cplusplus.com è anche un po' confusa, poiché la tabella qui sotto contiene comandi che ovviamente non sono terminati da un "m". In realtà sembra ancora più fuorviante qui se presentato proprio in alto.
ilkkachu,

1
Tecnicamente, il comando principale 0;nelle sequenze di colori non è necessario. Questo rende il colore di sfondo predefinito prima di impostare il primo piano. Puoi anche impostare lo sfondo con 4x.
querela del Fondo Monica

17

Sono comandi di controllo per il terminale.

I terminali erano in origine dispositivi piuttosto stupidi collegati a una porta seriale e non quei fantasiosi software con interfaccia grafica multi-scheda con menu che ora abbiamo. Dato che hanno ricevuto solo un flusso di caratteri (byte), non vi era alcuna chiara separazione tra i dati (cosa stampare sullo schermo) e i comandi (come stamparli). Invece i comandi sono rappresentati con caratteri di controllo speciali.

I caratteri di controllo ovvi sono elementi come avanzamento riga (nuova riga), backspace e segnale acustico campana, ma comandi più specifici sono dati come sequenze di caratteri, a partire dal ESCcarattere (codice 27 in decimale, 0x1b in esadecimale o 033 ottale). Viene spesso rappresentato come ^[o \033come nel tuo esempio.

La sequenza ESC [è denominata CSI o introduzione della sequenza di controllo e avvia un comando con parametri numerici opzionali, terminando in genere con una lettera che definisce il comando principale. La maggior parte delle sequenze di escape comuni rientrano in questa classe.

Gli elenchi dei codici di escape sono disponibili ad esempio nella console_codes(4)pagina man e nella pagina Wikipedia per i codici di escape ANSI .

Qualche esempio:

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

È possibile testare i comandi con ad esempio Bash. Usando la -ebandiera, il echocomando incorporato accetta \033come rappresentazione del ESCpersonaggio.

Ad esempio, questo stampa un saluto a colori al centro dello schermo e un altro normalmente nella posizione originale del cursore:

echo -e '\033[s\033[12;30f\033[30;46m  Hello!  \033[0m\033[uhello'

La sequenza ESC ]che hai citato è l'OSC o il comando del sistema operativo, che viene utilizzato principalmente nel comando per impostare il titolo della finestra xterme altri, ad esempio:

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

Poi ci sono anche ESC ( A(e altre lettere) che impostano set di caratteri nazionali su alcuni terminali, con un effetto potenzialmente esilarante .


8

Escape seguito da una parentesi quadra destra escape]viene utilizzato per introdurre un comando del sistema operativo ( OSC).

È in ECMA-48 e puoi leggere un riepilogo delle sequenze di controllo utilizzate da xterm nelle sequenze di controllo XTerm , ad esempio per modificare il titolo della finestra del terminale.

Le sequenze di escape possono iniziare con caratteri diversi. La C1 (8-bit) caratteri di controllo sezione XTerm controllo sequenze menziona alcuni di quelli: CSI(che si vede come escape[, APC, DCS, PM. La ragione per la diversa natura (secondo) è perché la coppia (fuga e ]) è associato ad un carattere di controllo a byte singolo utilizzato per diversi tipi di sequenza di escape.

Se leggi le specifiche, noterai che CSIviene utilizzato per i controlli con parametri numerici, mentre OSCconsente le stringhe. Al di là della sola sintassi, il comitato che ha creato questo standard aveva in mente gli usi APCe PMche differiva da DCSe OSC.



1

Le "sequenze di escape" descritte nelle altre risposte dipendono dal tipo di terminale in uso (il più delle volte "ANSI" o derivati ​​/ simili).

$ echo $TERM  
xterm

Se desideri scrivere script che sono (in qualche modo) INDIPENDENTI dal termine, ma che usano ancora ad esempio il colore e altre caratteristiche speciali, dai un'occhiata al contenuto di man terminfo.

per esempio

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

stamperà .test.con lo testsfondo giallastro e il colore di primo piano rosso, e questo funzionerà per QUALSIASI terminale che sia effettivamente in grado di usare i colori nello stesso modo.

Per vedere cosa viene effettivamente stampato, inserirlo od -t x1zcome in

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

... dove i valori sono mostrati in esadecimali (a causa di "x").

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.