Estoy tratando de imprimir un texto en la terminal usando el comando echo.
Quiero imprimir el texto en color rojo. ¿Cómo puedo hacer eso?
linux
bash
command-line
echo
terminal-color
satheesh.droid
fuente
fuente
Respuestas:
Puede usar estos códigos de escape ANSI :
Y luego úsalos así en tu script:
que imprime
love
en rojo.Según el comentario de @ james-lim, si está utilizando el
echo
comando, asegúrese de usar el indicador -e para permitir escapes de barra invertida .(no agregue
"\n"
cuando use echo a menos que desee agregar una línea vacía adicional)fuente
\e[0;31mHello Stackoverflow\e[0m
echo
que habilite los escapes de barra invertida.\x1B
lugar de\e
.\033
estaría bien para todas las plataformas.for (( i = 30; i < 38; i++ )); do echo -e "\033[0;"$i"m Normal: (0;$i); \033[1;"$i"m Light: (1;$i)"; done
Puede usar el increíble
tput
comando (sugerido en la respuesta de Ignacio ) para producir códigos de control de terminal para todo tipo de cosas.Uso
Los
tput
subcomandos específicos se analizan más adelante.Directo
Llamar
tput
como parte de una secuencia de comandos:Use en
;
lugar de&&
hacerlo si haytput
errores que el texto aún muestra.Variables de Shell
Otra opción es usar variables de shell:
tput
produce secuencias de caracteres que el terminal interpreta como que tienen un significado especial. No se mostrarán ellos mismos. Tenga en cuenta que aún pueden guardarse en archivos o procesarse como entrada por programas que no sean el terminal.Sustitución de comandos
Puede ser más conveniente insertar
tput
la salida directamente en susecho
cadenas usando la sustitución de comandos :Ejemplo
El comando anterior produce esto en Ubuntu:
Comandos de color de primer plano y fondo
Los colores son los siguientes:
También hay versiones que no son ANSI de las funciones de configuración de color (en
setb
lugar desetab
, y ensetf
lugar desetaf
) que usan números diferentes, no dados aquí.Comandos de modo de texto
Comandos de movimiento del cursor
Borrar e insertar comandos
Otros comandos
Con compiz wobbly windows , el
bel
comando hace que el terminal tambalee por un segundo para llamar la atención del usuario.Guiones
tput
acepta scripts que contienen un comando por línea, que se ejecutan en orden antes detput
salir.Evite archivos temporales haciendo eco de una cadena multilínea y canalizándola:
Ver también
man 1 tput
man 5 terminfo
la lista completa de comandos y más detalles sobre estas opciones. (Eltput
comando correspondiente aparece en laCap-name
columna de la tabla enorme que comienza en la línea 81).fuente
$()
es una sustitución de comando . Todo lo quetput af 1
hace es generar la cadena de código de color, pero los códigos no son caracteres imprimibles, por lo que escribirtput af 1
solo producirá una línea de salida en blanco.ncurses
tput
colores, consulte esta respuesta en Unix StackExchangereset=`tput sgr0`
debería serreset=`tput sgr 0`
, con un espacio.Algunas variables que puedes usar:
El carácter de escape en bash , hex y octal respectivamente:
breve ejemplo:
excepción bash:
Si va a utilizar estos códigos en sus variables especiales de bash
debe agregar caracteres de escape adicionales para que golpetazopuede interpretarlos correctamente. Sin que esto agregue caracteres de escape adicionales, funciona, pero enfrentará problemas cuando utilice la
Ctrl + r
búsqueda en su historial.regla de excepción para bash
Debe agregar
\[
antes de cualquier código ANSI inicial y agregar\]
después de cualquier código final.Ejemplo:
en uso regular:
\033[32mThis is in green\033[0m
para PS0 / 1/2/4:
\[\033[32m\]This is in green\[\033[m\]
\[
es para el inicio de una secuencia de no imprimibles caracteres\]
es para final de una secuencia de no imprimibles caracteresConsejo: para memorizarlo, primero puede agregar
\[\]
y luego poner su código ANSI entre ellos:-
\[start-ANSI-code\]
-
\[end-ANSI-code\]
tipo de secuencia de color:
Antes de sumergirse en estos colores, debe conocer 4 modos con estos códigos:
1. modo de color
Modifica el estilo de color, NO el texto. Por ejemplo, haga el color brillante u oscuro.
0
Reiniciar1;
más ligero de lo normal2;
más oscuro de lo normalEste modo no es ampliamente compatible. Es totalmente compatible con Gnome-Terminal.
2. modo texto
Este modo es para modificar el estilo del texto, NO el color.
3;
itálico4;
subrayar5;
parpadeando (lento)6;
parpadeando (rápido)7;
contrarrestar8;
esconder9;
tachadoy son casi compatibles.
Por ejemplo, KDE-Konsole es compatible
5;
pero Gnome-Terminal no lo es y Gnome es compatible8;
pero KDE no lo es.3. modo de primer plano
Este modo es para colorear el primer plano.
4. modo de fondo
Este modo es para colorear el fondo.
La siguiente tabla muestra un resumen de la versión de 3/4 bits de ANSI-color
La siguiente tabla muestra un resumen de la versión de 8 bits de ANSI-color
La prueba rápida de 8 bits:
for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done
La siguiente tabla muestra un resumen de la versión de 24 bits de ANSI-color
algunas capturas de pantalla
resumen de 8 bits en primer plano en una
.gif
resumen de fondo de 8 bits en una
.gif
resumen de color con sus valores
blinking
en KDE-Terminalun
C
código simple que te muestra másUna herramienta más avanzada que desarrollé para tratar con estos colores:
disparo en modo de color
disparo en modo texto
combinar está bien
más disparos
Consejos y trucos para usuarios avanzados y programadores:
¿Podemos usar estos códigos en un lenguaje de programación?
Sí tu puedes. Yo experimenté engolpetazo, C, c ++, re perl, pitón
¿Disminuyen la velocidad de un programa?
Creo que no.
¿Podemos usar estos en Windows?
3/4 bits Sí, si compila el código con
gcc
algunas capturas de pantalla en Win-7
¿Cómo calcular la longitud del código?
\033[
= 2, otras partes 1¿Dónde podemos usar estos códigos?
En cualquier lugar que tenga un
tty
intérpretexterm
,gnome-terminal
,kde-terminal
,mysql-client-CLI
y así sucesivamente.Por ejemplo, si desea colorear su salida con mysql, puede usar
Perl
guarde este código en un nombre de archivo:
pcc
(= Perl Colorize Character) y luego coloque el archivo a válido yPATH
luego úselo en cualquier lugar que desee.ls | pcc
df | pcc
adentro
mysql
primero regístralopager
y luego prueba:No NO manejar Unicode.
¿Estos códigos solo colorean?
No, pueden hacer muchas cosas interesantes. Tratar:
o:
Hay muchos principiantes que desean borrar la pantalla
system( "clear" )
para que pueda usar esto en lugar desystem(3)
llamar¿Están disponibles en Unicode?
Si.
\u001b
¿Qué versión de estos colores es preferible?
Es fácil de usar
3/4-bit
, pero es mucho más preciso y hermoso de usar24-bit
.Si no tienes experiencia conhtmlasí que aquí hay un tutorial rápido:
24 bits significa:
00000000
y00000000
y00000000
. Cada 8 bits es para un color específico.1..8
es por y9..16
para y17..24
porlo tanto, enhtml
#FF0000
significa y aquí está:255;0;0
enhtml
#00FF00
¿Qué significa aquí?0;255;0
¿Tiene sentido? de qué color quieres combinarlo con estos tres valores de 8 bits.
referencia:
Wikipedia
ANSI secuencias de escape
tldp.org
tldp.org
misc.flogisoft.com
algunos blogs / páginas web que no recuerdo
fuente
x1B[
para eliminarlo.Usar
tput
con lasetaf
capacidad y un parámetro de1
.fuente
\033[31m
romperá la biblioteca readline en algunos de los terminales.i
el límite superior para obtener más sombras):for (( i = 0; i < 17; i++ )); do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; done
tput: command not found
(en alpino)El
[31m
controla el color del texto:30
-37
establece el color de primer plano40
-47
establece el color de fondoPuede encontrar una lista más completa de códigos de colores aquí .
Es una buena práctica restablecer el color del texto
\033[0m
al final de la cadena.fuente
Acabo de amalgamar las buenas capturas en todas las soluciones y terminé con:
Y puedes llamarlo así:
fuente
Este es el cambio de color
\033[
. Ver la historia .Los códigos de color son como
1;32
(Verde claro),0;34
(Azul),1;34
(Azul claro), etc.Terminamos las secuencias de color con un interruptor de color
\033[
y0m
el código sin color. Al igual que abrir y cerrar pestañas en un lenguaje de marcado.echo
Solución de función de color simple :fuente
text
variable detext="$color${@: 2}${code}0m"
esta manera, se coloreará toda la línea excepto el parámetro de color.Una forma ordenada de cambiar el color solo para uno
echo
es definir dicha función:Uso:
O puede usar directamente los códigos de color mencionados en la respuesta de Drew :
fuente
-n
al eco, puede usarlo como colorante en líneaecho "Red `coloredEcho "fox" red` jumps over the lazy dog"
Use
tput
para calcular códigos de colores. Evite usar el código de escape ANSI (por ejemplo,\E[31;1m
para rojo) porque es menos portátil. Bash en OS X, por ejemplo, no lo admite.fuente
Esta pregunta ha sido respondida una y otra vez :-) pero por qué no.
El primer uso
tput
es más portátil en entornos modernos que la inyección manual de códigos ASCII a través deecho -E
Aquí hay una función bash rápida:
Ahora puedes usar:
Llegar:
Notas sobre la portabilidad de
tput
El primer
tput(1)
código fuente se cargó en septiembre de 1986.tput(1)
ha estado disponible en la semántica de X / Open curses en la década de 1990 (el estándar de 1997 tiene la semántica mencionada a continuación).Entonces, es ( bastante ) ubicuo.
fuente
tput
? ¿Está disponible en la mayoría de los servidores donde uno no tiene derechos de administrador para instalarlo? ¿Tiene un enlace a donde esta técnica fue 'inventada' por primera vez?$PS1
sin\[...\]
las partes que no están separadas ? Continúe usando los marcadores Bash PS1 con las cadenas tput.Gracias a @ k-five por esta respuesta
Resultado
Espero que esta imagen te ayude a elegir tu color para tu fiesta: D
fuente
Si está usando
zsh
obash
Probar en línea
fuente
¡Podemos usar colores verdaderos de 24 Bits RGB para texto y fondo!
Ejemplo de texto rojo y etiqueta de cierre:
Generador:
Mostrar fragmento de código
¿Es seguro usarlo en mis scripts?
¡Si! Los terminales de 8 y 16 bits solo mostrarán un color alternativo en el rango de la paleta disponible, manteniendo el mejor contraste, ¡sin roturas!
Además, nadie notó la utilidad del video invertido del código 7 de ANSI .
Sigue siendo legible en cualquier combinación de colores de terminales, fondos en blanco y negro u otras paletas de fantasía, intercambiando colores de primer plano y de fondo.
Ejemplo, para un fondo rojo que funciona en todas partes:
Así es como se ve al cambiar los esquemas integrados del terminal:
Este es el script de bucle utilizado para el gif.
Ver https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters
fuente
Estos códigos funcionan en mi caja de Ubuntu:
Esto imprime las letras abcd todas en diferentes colores:
En bucle:
fuente
Encontré la increíble respuesta de Shakiba Moshiri mientras buscaba información sobre ese tema ... luego tuve una idea ... y terminó en una función bastante agradable extremadamente fácil de usar 😁
Así que tengo que compartirla 😉
https://github.com/ppo/bash-colors
Uso:
$(c <flags>)
dentro de unecho -e
oprintf
Ejemplos:
fuente
Por legibilidad
Si desea mejorar la legibilidad del código,
echo
primero puede usar la cadena y luego agregar el color usandosed
:fuente
Mi respuesta favorita hasta ahora es coloredEcho.
Solo para publicar otra opción, puedes consultar esta pequeña herramienta xcol
https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/
lo usa como grep, y coloreará su stdin con un color diferente para cada argumento, por ejemplo
Tenga en cuenta que acepta cualquier expresión regular que sed aceptará.
Esta herramienta usa las siguientes definiciones
Yo uso estas variables en mis scripts así
fuente
Para ampliar esta respuesta , para los flojos de nosotros:
fuente
tput
; para eso es!tput
parasc
yrc
aunque (guardar cursor, restaurar cursor). Aunque esta respuesta me llama "vago", podría reformularse como "práctico" o "directo al grano".para mostrar la salida del mensaje con un color diferente que puede hacer:
fuente
Definitivamente debe usar tput sobre secuencias de control ANSI sin procesar.
de http://wiki.bash-hackers.org/scripting/terminalcodes
Dicho esto, escribí una pequeña biblioteca auxiliar llamada bash-tint , que agrega otra capa encima de tput, lo que hace que sea aún más fácil de usar (en mi humilde opinión):
Ejemplo:
tint "white(Cyan(T)Magenta(I)Yellow(N)Black(T)) is bold(really) easy to use."
Daría el siguiente resultado:
fuente
En lugar de codificar códigos de escape específicos de su terminal actual, debería usar
tput
.Este es mi script de demostración favorito:
fuente
Estoy usando esto para imprimir en color
Todos los colores básicos se configuran como variables y también hay algunas funciones útiles: XY, línea y que. Obtenga este script en uno de los suyos y use todos los colores y funciones.
fuente
Y esto es lo que solía ver toda combinación y decidir qué lecturas son geniales:
fuente
He escrito botín para lograr eso.
Solo puedes hacer
Ahora puede instalar todos los comandos de escape como archivos txt en un destino determinado a través de:
O incluso más fácil a través de:
Que instalará los colores a
~/.colors
.O los usas así:
O de esta manera, que me parece más interesante:
¡ Míralo en asciinema !
fuente
Aquí hay una pequeña secuencia de comandos simple, que reuní recientemente, que coloreará cualquier entrada canalizada en lugar de usar "Toilet".
File: color.bsh
Luego llámalo con color rojo (196):
$> echo "text you want colored red" | color.bsh 196
fuente
Referirse a:
fuente
Aquí está la solución más simple y legible. Con bashj ( https://sourceforge.net/projects/bashj/ ), simplemente elegiría una de estas líneas:
256x256x256
los colores están disponibles si tiene el soporte de color en su aplicación de terminal.fuente
después de mezclar otras soluciones de hilo, así es como logré obtener colores en la
npm scripts
salida (CLI de gitbash):fuente
Al igual que algo un poco por ahí, pasarlo por grep lo resaltará como rojo (pero solo rojo). También puede usar tuberías con nombre para que su cadena esté más cerca del final de la línea:
fuente
Esta respuesta es correcta, excepto que la llamada a los colores no debe estar entre comillas.
Debería hacer el truco.
fuente
echo -e '\e[0;31mHello Stackoverflow\e[0m'
. Entonces es lo mismo para bash.