Respuestas:
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 con 4x
.
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:
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
Puede probar los comandos con, por ejemplo, Bash. Usando la -e
bandera, el echo
comando incorporado acepta \033
como una representación del ESC
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:
echo -e '\033[s\033[12;30f\033[30;46m Hello! \033[0m\033[uhello'
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 ventana xterm
y otros, por ejemplo:
echo -e '\033]0;new window title\a'
Luego también hay ESC ( A
(y otras letras) que establecen conjuntos de caracteres nacionales en algunas terminales, con un efecto potencialmente hilarante .
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 que OSC
permite cadenas. Más allá de la sintaxis, el comité que creó este estándar tenía en mente los usos para APC
y PM
que diferían de DCS
y OSC
.
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).
Las "secuencias de escape" descritas en las otras respuestas dependen del tipo de terminal que tenga (con mayor frecuencia "ANSI" o derivados / similares).
$ echo $TERM
xterm
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
$ echo -n ".";tput setb 6;tput setf 4;echo -n "test";tput sgr0;echo "."
se imprimirá .test.
con test
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
$ tput sgr0 | od -t x1z
0000000 1b 28 42 1b 5b 6d >.(B.[m<
0000006
... donde los valores se muestran en hexadecimal (debido a "x").