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
loveen rojo.Según el comentario de @ james-lim, si está utilizando el
echocomando, 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[0mechoque habilite los escapes de barra invertida.\x1Blugar de\e.\033estarí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)"; donePuede usar el increíble
tputcomando (sugerido en la respuesta de Ignacio ) para producir códigos de control de terminal para todo tipo de cosas.Uso
Los
tputsubcomandos específicos se analizan más adelante.Directo
Llamar
tputcomo parte de una secuencia de comandos:Use en
;lugar de&&hacerlo si haytputerrores que el texto aún muestra.Variables de Shell
Otra opción es usar variables de shell:
tputproduce 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
tputla salida directamente en susechocadenas 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
setblugar desetab, y ensetflugar 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
belcomando hace que el terminal tambalee por un segundo para llamar la atención del usuario.Guiones
tputacepta scripts que contienen un comando por línea, que se ejecutan en orden antes detputsalir.Evite archivos temporales haciendo eco de una cadena multilínea y canalizándola:
Ver también
man 1 tputman 5 terminfola lista completa de comandos y más detalles sobre estas opciones. (Eltputcomando correspondiente aparece en laCap-namecolumna de la tabla enorme que comienza en la línea 81).fuente
$()es una sustitución de comando . Todo lo quetput af 1hace es generar la cadena de código de color, pero los códigos no son caracteres imprimibles, por lo que escribirtput af 1solo producirá una línea de salida en blanco.ncursestputcolores, 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 + rbú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[0mpara 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.
0Reiniciar1;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"; doneLa 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
.gifresumen de fondo de 8 bits en una
.gifresumen de color con sus valores
blinkingen KDE-TerminalCcódigo simple que te muestra másdisparo 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
gccalgunas 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
ttyintérpretexterm,gnome-terminal,kde-terminal,mysql-client-CLIy así sucesivamente.Por ejemplo, si desea colorear su salida con mysql, puede usar
Perlguarde este código en un nombre de archivo:
pcc(= Perl Colorize Character) y luego coloque el archivo a válido yPATHluego úselo en cualquier lugar que desee.ls | pccdf | pccadentro
mysqlprimero regístralopagery 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
y
y 
y aquí está:
aquí?
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:
00000000y00000000y00000000. Cada 8 bits es para un color específico.1..8es por9..16para17..24porlo tanto, enhtml
#FF0000significa255;0;0enhtml
#00FF00¿Qué significa0;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
tputcon lasetafcapacidad y un parámetro de1.fuente
\033[31mromperá la biblioteca readline en algunos de los terminales.iel límite superior para obtener más sombras):for (( i = 0; i < 17; i++ )); do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; donetput: command not found(en alpino)El
[31mcontrola el color del texto:30-37establece el color de primer plano40-47establece 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[0mal 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[y0mel código sin color. Al igual que abrir y cerrar pestañas en un lenguaje de marcado.echoSolución de función de color simple :fuente
textvariable 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
echoes definir dicha función:Uso:
O puede usar directamente los códigos de color mencionados en la respuesta de Drew :
fuente
-nal eco, puede usarlo como colorante en líneaecho "Red `coloredEcho "fox" red` jumps over the lazy dog"Use
tputpara calcular códigos de colores. Evite usar el código de escape ANSI (por ejemplo,\E[31;1mpara 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
tputes más portátil en entornos modernos que la inyección manual de códigos ASCII a través deecho -EAquí hay una función bash rápida:
Ahora puedes usar:
Llegar:
Notas sobre la portabilidad de
tputEl 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?$PS1sin\[...\]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
zshobashProbar 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 -eoprintfEjemplos:
fuente
Por legibilidad
Si desea mejorar la legibilidad del código,
echoprimero 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!tputparascyrcaunque (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.bshLuego llámalo con color rojo (196):
$> echo "text you want colored red" | color.bsh 196fuente
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:
256x256x256los 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 scriptssalida (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.