Encontré muchas secuencias de escape en Bash \033]
, pero ¿cuáles son estas secuencias y por qué están comenzando \033]
?
La cadena es en realidad \033[
y eso no es todo.
Después de ese paréntesis de apertura viene una serie de números y símbolos. Esta cadena se conoce como una secuencia de escape y se usa para controlar el cursor de la consola y el color del texto, entre otras cosas.
las secuencias de escape sin impresión tienen que estar encerradas en
\[\033[ and \]
Si la secuencia de escape controla el color del texto, entonces será seguido por un m
.
Aquí hay una tabla para las secuencias de colores:
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
Entonces, si desea que el indicador de la consola sea azul, usaría la siguiente secuencia de escape (en el nombre de archivo que estoy olvidando):
\[\033[34m\]
(Observe el m
)
Sin embargo, esta secuencia de escape no solo controla el color. También puede controlar el movimiento del cursor. Aquí hay una tabla / lista con los códigos de movimiento y cómo funcionan:
Posiciona el cursor:
\033[<L>;<C>H
O
\033[<L>;<C>f
coloca el cursor en la línea L y la columna C.
Mueva el cursor hacia arriba N líneas:
\033[<N>A
Mueva el cursor hacia abajo N líneas:
\033[<N>B
Mueva el cursor hacia adelante N columnas:
\033[<N>C
Mueva el cursor hacia atrás N columnas:
\033[<N>D
Despeje la pantalla, vaya a (0,0):
\033[2J
Borrar hasta el final de la línea:
\033[K
Guardar posición del cursor:
\033[s
Restaurar la posición del cursor:
\033[u
Solo tenga en cuenta que los dos últimos pueden no funcionar en el emulador de terminal que usa. Aparentemente, solo xterm
y nxterm
usa esas dos secuencias.
Y ejemplo usando una de estas secuencias de escape: digamos que quiero colocar mi cursor en la línea 3, columna (carácter) 9. Para eso, usaría
\[033\[3;9H]
(Supongo que la columna 0 es la primera posición, por lo que sería el octavo carácter).
Fuente: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html (también lea 6.2)
Lectura más general: http://ascii-table.com/ansi-escape-sequences.php
[2K
borra toda la línea antes y después del cursor. Una fuente mucho mejor sería el artículo de Wikipedia, o podría ir directamente a ECMA-48 , sección 8.3.117 SGR - Seleccionar representación gráfica .0;
en las secuencias de color es innecesario. Eso solo hace que el color de fondo sea el predeterminado antes de configurar el primer plano. También puede establecer el fondo con4x
.Son comandos de control para la terminal.
Los terminales eran originalmente dispositivos bastante tontos conectados a un puerto serie, y no esos sofisticados softwares GUI de múltiples pestañas con menús que ahora tenemos. Como solo recibieron una secuencia de caracteres (bytes), no hubo una separación clara entre los datos (qué imprimir en la pantalla) y los comandos (cómo imprimirlos). En cambio, los comandos se representan con caracteres de control especiales.
Los caracteres de control obvios son cosas como salto de línea (nueva línea), retroceso y pitido de campana, pero se dan comandos más específicos como secuencias de caracteres, comenzando con el
ESC
carácter (código 27 en decimal, 0x1b en hexadecimal o 033 octal). A menudo se representa como^[
, o\033
como en su ejemplo.La secuencia
ESC [
se llama CSI, o introductor de secuencia de control, e inicia un comando con parámetros numéricos opcionales, que generalmente termina en una letra que define el comando principal. La mayoría de las secuencias de escape comunes caen en esta clase.Las listas de los códigos de escape se pueden encontrar, por ejemplo, en la
console_codes(4)
página del manual y en la página de Wikipedia para los códigos de escape ANSI .Algunos ejemplos:
Puede probar los comandos con, por ejemplo, Bash. Usando la
-e
bandera, elecho
comando incorporado acepta\033
como una representación delESC
personaje.Por ejemplo, esto imprimirá un saludo en color en el medio de la pantalla y otro normalmente en la posición original del cursor:
La secuencia
ESC ]
que mencionó es el OSC o el comando del sistema operativo, que se utiliza principalmente en el comando para establecer el título de la ventanaxterm
y otros, por ejemplo:Luego también hay
ESC ( A
(y otras letras) que establecen conjuntos de caracteres nacionales en algunas terminales, con un efecto potencialmente hilarante .fuente
Escape seguido de un corchete derecho escape
]
se utiliza para introducir un comando del sistema operativo (OSC
).Está en ECMA-48 , y puede leer un resumen de las secuencias de control utilizadas por xterm en Secuencias de control de XTerm , por ejemplo, para cambiar el título de la ventana de terminal.
Las secuencias de escape pueden comenzar con diferentes personajes. El C1 (8 bits) Caracteres de Control de la sección en XTerm secuencias de control menciona algunos de los que:
CSI
(que se ve como escape[
,APC
,DCS
,PM
. La razón del carácter diferente (segundo) se debe a que el par (escapar y]
) se asocia con una carácter de control de un solo byte utilizado para diferentes tipos de secuencia de escape.Si lee la especificación, notará que
CSI
se usa para controles con parámetros numéricos, mientras queOSC
permite cadenas. Más allá de la sintaxis, el comité que creó este estándar tenía en mente los usos paraAPC
yPM
que diferían deDCS
yOSC
.fuente
Estos se denominan códigos de escape ANSI y se enumeran en la página del manual para console_codes . No son específicos de Bash, sino que funcionan en cualquier aplicación de consola siempre y cuando el terminal los admita (la mayoría de los emuladores de terminal lo hacen).
fuente
Las "secuencias de escape" descritas en las otras respuestas dependen del tipo de terminal que tenga (con mayor frecuencia "ANSI" o derivados / similares).
Si desea escribir guiones que sean (algo) INDEPENDIENTES del término, pero que aún utilicen, por ejemplo, color y otras características especiales, eche un vistazo al contenido de
man terminfo
.p.ej
se imprimirá
.test.
contest
un fondo amarillento y un color de primer plano rojo, y esto funcionará para CUALQUIER terminal que sea capaz de usar colores de la misma manera.Para ver qué se imprime realmente, póngalo
od -t x1z
como en... donde los valores se muestran en hexadecimal (debido a "x").
fuente