Las secuencias de escape ANSI consisten en una secuencia de caracteres que comienza con el carácter Escape, carácter 27. El siguiente carácter es a menudo (aunque no siempre) un corchete abierto: [
El comando echo puede enviar caracteres de escape si especifica -e
y usa \e
para escape.
El estándar ANSI define 8 colores, más un modo brillante, que da un total de 16 posibilidades. La secuencia es:
\e[<number>m
¿Dónde <number>
está uno de:
Primer plano:
- 30 negro
- 31 rojo
- 32 verde
- 33 amarillo
- 34 azul
- 35 magenta
- 36 cian
- 37 blanco
Fondo:
- 40 negro
- 41 rojo
- 42 verde
- 43 amarillo
- 44 azul
- 45 magenta
- 46 cian
47 blanco
0 Restablecer todo
- 1 negrita
Entonces, para que su primer plano sea rojo y su fondo amarillo:
$ echo -e "\e[31m\e[43m"
Y para habilitar negrita:
$ echo -e "\e[1m"
Por supuesto, puedes combinarlos todos juntos:
$ echo -e "\e[31m\e[43m\e[1m"
Existen muchos otros códigos de escape para hacer otras cosas.
Por ejemplo, borre la pantalla y mueva el cursor hacia la esquina superior izquierda:
$ echo -e "\e[2J\e[1;1H"
Lo cual es útil al cambiar el color:
$ echo -e "\e[31m\e[43m\e[1m\e[2J\e[1;1H"
Lo que cambiará los colores, borrará la pantalla y colocará el cursor en la esquina superior izquierda. Bueno, casi arriba a la izquierda. Echo coloca un retorno de carro, por lo que se mueve hacia abajo una línea. Puede agregar -n
a echo para evitar esto si es quisquilloso.
Si lo estropea todo y no puede ver lo que está escribiendo, puede restablecer los colores del terminal a la normal presionando:
Ctrl+v
[
0
m
Return
En lo que esperas es el símbolo del sistema. Se informará sobre un comando desconocido, pero podrá ver lo que está haciendo nuevamente.
echo -ne '\e[31;43m'
(en lugar del anteriorecho -e "\e[31m\e[43m"
).¡Tenga en cuenta que los Xterms modernos admiten el color de 32 bits!
Ejemplo simple. Para establecer un bonito fondo morado oscuro (oye, cada uno a su propio) de valor # 53186f, debes:
Tenga en cuenta que esto cambia instantáneamente el color de toda la ventana, no solo del texto posterior. Esto es especialmente bueno para hacer una ventana obviamente diferente después de enviar un mensaje a un servidor (por ejemplo). Ponga el 'echo' anterior en su .bashrc y su terminal cambiará automáticamente los colores cuando inicie sesión en ese servidor (pero no volverá a cambiar cuando cierre Ctrl-D)
Puede pasar HORAS en la red buscando esto: la mayoría de los documentos solo hablan de los 16 colores ANSI originales.
Fuentes: http://www.steike.com/code/xterm-colors/ y http://rtfm.etla.org/xterm/ctlseq.html (consulte "Controles del sistema operativo")
Tenga en cuenta: la secuencia de escape anterior es válida para XTerms, y puede no funcionar para otras implementaciones de emuladores de terminal de ventanas "tipo XTerm" que pueden "verse" como un XTerm. Por ejemplo, "gnome-terminal" o "konsole" tienen diferentes secuencias de escape, o pueden no implementar ningún cambio de color.
fuente
Sí. Los terminales ANSI admiten códigos de escape ANSI . Cada
Control Sequence Introducer
(CSI
) Código en el siguiente formato:El carácter Ascii
27
(elESC
carácter) o1b
en hexadecimal, seguido de un corchete izquierdo y luego una letra que indica la acción que se utilizará.Tenga en cuenta que
;
se puede proporcionar una lista de parámetros separados directamente antes del<<<CODE>>>
parámetro.Ahora, los colores usan un subconjunto de
CSI
códigos, losSelect Graphic Rendition
códigos. Estos están en la forma:El
SGR
código se pasa como parámetro elCSI
. Relevantes para su pregunta son losSGR
códigos 30-49. Los códigos 30-39 establecen el color de primer plano. Los códigos 40-49 establecen el color de fondo.Los códigos 38 y 48 son códigos especiales. Estos son los que le permiten usar valores RGB. El formato para estos es:
Nota: los usos alternativos incluyen
\x1b[<3 or 4>8;5;<web safe color index>m
. Con este uso, hay una codificación de color completamente diferente. Consulte el enlace en la parte superior de esta respuesta para obtener más información.Los códigos 39 y 49 establecen los colores de primer plano y de fondo a sus valores predeterminados, que se definen terminal por terminal.
En la práctica, los colores 30-37 40-47 son ligeramente diferentes de lo que sus etiquetas dicen que son.
Para obtener los colores claros, se utiliza la SGI para negrita,
1
. Negrita es un nombre engañoso. No pone la fuente en negrita. Realmente aumenta el brillo del texto. Con negrita aplicada los colores se convierten en:Aviso: los dos últimos bloques de números de colores son relevantes tanto para fore- como para background (
<index> + (30 or 40)
).Para eliminar todos los estilos (volver al modo predeterminado / normal) use
SGR
0.CSI
Los códigos no son todos gráficos. Por ejemplo,ESC[2J
borrará su terminal.ESC[<y>;<x>H
establece la posición del cursor (1 indexado). Vea el artículo de Wikipedia para más información.Nota: para probar esto, use
echo -e
oprintf
.fuente
NOTA: "^ [" es el carácter de escape y se inserta con un CTRL-V, CTRL- [y ^ G es un carácter de campana, insertado con CTRL-V, CTRL-G
El siguiente bloque está en mi .bash_profile y garantiza que mis xterms en este sistema SIEMPRE sean blanco sobre negro, incluso después de iniciar sesión en otro sistema que puede haber cambiado mis colores.
fuente
compruebe también un proyecto ScriptEchoColor
, está completamente hecho en scripts de bash
, tiene paquetes para ubuntu aquí,
pero estos scripts se pueden instalar en cualquier distribución si sabe cómo hacerlo (lo último también se puede descargar desde su git).
puede usar nombres de color acortados o extendidos como:
una muestra:
Además, asegúrese de echar un vistazo a xtermcontrol , para un control más extenso sobre el xterm en sí mismo (no solo los caracteres).
fuente
Entre los muchos códigos ANSI CSI se encuentra uno llamado SGR, o Seleccionar representación gráfica. Esto es ESC,
[
parámetros,m
donde los parámetros son uno o más enteros en formato ASCII, separados por punto y coma. Los diferentes parámetros de SGR se enumeran en la página de Wikipedia anterior (aunque no se detalla en detalle para todos ellos).Algunos parámetros, como
1
(negrita o mayor intensidad) y31
(texto rojo) son independientes, y se pueden usar individualmente o combinados, como enESC[31m
oESC[1;31m
para dar texto estándar rojo y negrita en primer plano, respectivamente.Otros toman parámetros ellos mismos, que simplemente se proporcionan después del código como más números separados por punto y coma. Entonces, por ejemplo,
ESC[38;5;219m
mostraría el texto de primer plano en el número de color extendido 219, yESC[38;2;150;100;50m
lo mostraría en el color con valor RGB 150, 100, 50. En este caso,38
es el comando "color de primer plano de conjunto extendido", que siempre es seguido por un subcomando El subcomando2
toma tres parámetros, los valores de los componentes rojo, verde y azul. De manera diferente, el subcomando5
toma solo un valor más, un número de 0 a 255 que especifica un color de una tabla con la que está configurado el terminal.La siguiente función de shell puede ser útil para usar estos códigos:
Puedes usarlo así:
Tenga en cuenta que si no le da parámetros
sgr()
, el valor predeterminado es el código SGR 0, lo que significa desactivar todos los atributos y restablecer el texto al valor predeterminado para ese terminal.fuente
ESC[38
...m
yESC[38
...m
lata / debería (depende de su fuente de información - lo último un ser, yo creo, itu.int/rec/T-REC-T.416-199303-I ) debe utilizar el, de lo contrario, carácter reservado:
(para separar los elementos del parámetro ) de modo que;
solo se use entre cadenas de parámetros completas , es decir,ESC[38;2;150;100;50m
debe escribirseESC[38:2::150:100:50m
...2
y el150
- ya que nadie, que yo sepa , ha definido qué valor debe entrar allí, se usará el valor predeterminado vacío, pero a menudo se omite y usar solo;
como separador hace que sea imposible procesar de manera confiable la información de acuerdo con la especificación.