LinuxParty
En el lenguaje de programación Shell Script, los colores son códigos especiales que se utilizan para cambiar el color del texto o el fondo en la terminal. Estos códigos se pueden insertar en el código del script y se mostrarán cuando se ejecute el script.
Para usar colores en Shell Script, se deben usar secuencias de escape especiales, que comienzan con una barra invertida seguida de una letra "e" y luego de un código de color en formato octal. Por ejemplo, la secuencia de escape "\e[31m" cambiará el color del texto a rojo. Para volver al color original, se puede usar la secuencia de escape "\e[0m".
Es importante tener en cuenta que estos códigos de color solo funcionarán en terminales que soporten colores ANSI. Algunos terminales no lo hacen, por lo que es importante asegurarse de que el script funcione correctamente en todas las plataformas.
Puede agregar color a su terminal Linux usando configuraciones especiales de codificación ANSI, ya sea dinámicamente en un comando de terminal o en archivos de configuración, o puede usar temas listos para usar en su emulador de terminal. De cualquier manera, el texto nostálgico en verde o ámbar en una pantalla negra es totalmente opcional. Este artículo demuestra cómo puede hacer que Linux sea tan colorido (o monocromático) como desee.
Capacidades terminales
Los sistemas modernos generalmente tienen por defecto al menos xterm-256color, pero si intenta agregar color a su terminal sin éxito, debe verificar la configuración de TERM.
En resumen, los terminales Unix son dispositivos de entrada y salida que permiten a los usuarios interactuar con un sistema informático a través de comandos de texto. En la actualidad, la mayoría de los terminales son software y se ejecutan en una computadora personal, pero aún tienen raíces en los dispositivos de teletipo y monitores CRT del pasado. La configuración de TERM es importante para asegurar que el terminal tenga la capacidad de mostrar todos los colores y características necesarias para una experiencia de usuario óptima.
Por ejemplo, el nuevo y elegante VT100 lanzado en 1978 admitía el color ANSI, por lo que si un usuario identificaba el tipo de terminal como vt100, entonces una computadora podría entregar salida en color, mientras que un dispositivo serial básico podría no tener esa opción. El mismo principio se aplica hoy en día, y lo establece la variable de entorno TERM . Puede verificar su definición de TERM con echo :
echo $TERM
xterm-256color
El archivo /etc/termcap está obsoleto (pero aún mantenido en algunos sistemas en aras de la compatibilidad con versiones anteriores) definía las capacidades de los terminales y las impresoras. La versión moderna de eso es terminfo, ubicada en /etc o /usr/share, dependiendo de su distribución. Estos archivos enumeran las características disponibles en diferentes tipos de terminales, muchas de las cuales están definidas por hardware histórico: existen definiciones para vt100 a vt220, así como para emuladores de software modernos como xterm y Xfce. A la mayoría del software no le importa qué tipo de terminal esté utilizando; en raras ocasiones, es posible que reciba una advertencia o error sobre un tipo de terminal incorrecto al iniciar sesión en un servidor que verifica las funciones compatibles. Si su terminal está configurado en un perfil con muy pocas funciones, pero sabe que el emulador que usa es capaz de más,luego puede cambiar su configuración definiendo la variable de entorno TERM. Puede hacer esto exportando la variable TERM en su archivo de configuración ~/ .bashrc:
export TERM=xterm-256color
Guarde el archivo y vuelva a cargar su configuración:
$ source ~/.bashrc
Códigos de color ANSI
A continuación se presenta una lista de algunos códigos de color comunes en Shell Script:
- "\e[30m" para hacer el texto negro
- "\e[31m" para hacer el texto rojo
- "\e[32m" para hacer el texto verde
- "\e[33m" para hacer el texto amarillo
- "\e[34m" para hacer el texto azul
- "\e[35m" para hacer el texto morado
- "\e[36m" para hacer el texto cian
- "\e[37m" para hacer el texto blanco
También se pueden usar códigos de color para el fondo de la terminal, utilizando los mismos códigos de color pero agregando un "4" antes del código de color. Por ejemplo, "\e[44m" cambiaría el color del fondo a azul.
Los terminales modernos han heredado secuencias de escape ANSI para funciones "meta". Se trata de secuencias especiales de caracteres que un terminal interpreta como acciones en lugar de caracteres. Por ejemplo, esta secuencia limpia la pantalla hasta el siguiente mensaje:
$ printf `\033[2J`
No borra tu historial; simplemente aclara la pantalla en su emulador de terminal, por lo que es una secuencia de escape ANSI segura y demostrativa.
ANSI también tiene secuencias para configurar el color de su terminal. Por ejemplo, escribir este código cambia el texto siguiente a verde:
$ printf '\033[32m'
Siempre que vea el color de la misma manera que lo hace su computadora, puede usar el color para ayudarlo a recordar en qué sistema está conectado. Por ejemplo, si usa SSH regularmente en su servidor, puede configurar el indicador del servidor en verde para ayudarlo a diferenciarlo de un vistazo del indicador local. Para un mensaje verde, use el código ANSI para el verde antes de su carácter de mensaje y termínelo con el código que representa su color predeterminado normal:
export PS1=`printf "\033[32m$ \033[39m"`
Primer plano y fondo
No está limitado a configurar el color de su texto. Con los códigos ANSI, puede controlar el color de fondo de su texto y aplicar un estilo rudimentario.
Por ejemplo, con \ 033 [4m , puede hacer que el texto esté subrayado, o con \ 033 [5m puede configurarlo para que parpadee. Eso puede parecer una tontería al principio, porque probablemente no configurará su terminal para subrayar todo el texto y parpadear todo el día, pero puede ser útil para determinadas funciones. Por ejemplo, puede configurar un error urgente producido por un script de shell para que parpadee (como una alerta para su usuario), o puede subrayar una URL.
Para su referencia, aquí están los códigos de color de primer plano y de fondo. Los colores de primer plano están en el rango de 30, mientras que los colores de fondo están en el rango de 40:
Color | Primer plano | Fondo |
---|---|---|
Negro | \033[30m | \033[40m |
rojo | \033[31m | \033[41m |
Verde | \033[32m | \033[42m |
naranja | \033[33m | \033[43m |
Azul | \033[34m | \033[44m |
Magenta | \033[35m | \033[45m |
Cian | \033[36m | \033[46m |
Gris claro | \033[37m | \033[47m |
Retorno al valor predeterminado de la distribución | \033[39m | \033[49m |
Hay algunos colores adicionales disponibles para el fondo:
Color | Fondo |
---|---|
Gris oscuro | \033[100m |
Luz roja | \033[101m |
Verde claro | \033[102m |
Amarillo | \033[103m |
Azul claro | \033[104m |
Morado claro | \033[105m |
Verde azulado | \033[106m |
blanco | \033[107m |
Permanencia
Establecer colores en su sesión de terminal es solo temporal y relativamente incondicional. A veces, el efecto dura unas pocas líneas; eso se debe a que este método de establecer colores se basa en una declaración printf para establecer un modo que dura solo hasta que algo más lo anula.
La forma en que un emulador de terminal generalmente recibe instrucciones sobre qué colores usar es a partir de la configuración de la variable de entorno LS_COLORS, que a su vez se completa con la configuración de dircolors. Puede ver su configuración actual con una declaración de eco:
$ echo $LS_COLORS rs=0:di=38;5;33:ln=38;5;51:mh=00:pi=40; 38;5;11:so=38;5;13:do=38;5;5:bd=48;5; 232;38;5;11:cd=48;5;232;38;5;3:or=48; 5;232;38;5;9:mi=01;05;37;41:su=48;5; 196;38;5;15:sg=48;5;11;38;5;16:ca=48;5; 196;38;5;226:tw=48;5;10;38;5;16:ow=48;5; [...]
O puede usar dircolors directamente:
$ dircolors --print-database[ ... ] # formatos de imagen.jpg 01;35 .jpeg 01;35 .mjpg 01;35 .mjpeg 01;35 .gif 01;35 .bmp 01;35 .pbm 01;35 .tif 01;35 .tiff 01;35[ ... ]
Si eso parece críptico, es porque lo es. El primer dígito después de un tipo de archivo es el código de atributo y tiene seis opciones:
- 00 ninguno
- 01 negrita
- 04 subrayado
- 05 parpadeo
- 07 marcha atrás
- 08 oculto
El siguiente dígito es el código de color en forma simplificada. Puede obtener el código de color tomando el último dígito del código ANSII (32 para primer plano verde, 42 para fondo verde; 31 o 41 para rojo, y así sucesivamente).
Su distribución probablemente establece LS_COLORS globalmente, por lo que todos los usuarios de su sistema heredan los mismos colores. Si desea un conjunto de colores personalizado, puede usar dircolors para eso. Primero, genere una copia local de su configuración de color:
$ dircolors --print-database > ~/.dircolors
Edite su lista local como desee. Cuando esté satisfecho con sus opciones, guarde el archivo. Su configuración de color es solo una base de datos y ls no puede usarla directamente , pero puede usar dircolors para obtener el código de shell que puede usar para configurar LS_COLORS:
$ dircolors --bourne-shell ~/.dircolors LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00: pi=40;33:so=01;35:do=01;35:bd=40;33;01: cd=40;33;01:or=40;31;01:mi=00:su=37;41: sg=30;43:ca=30;41:tw=30;42:ow=34; [...] export LS_COLORS
Copie y pegue esa salida en su archivo ~ / .bashrc y vuelva a cargar. Alternativamente, puede volcar esa salida directamente en su archivo .bashrc y volver a cargar.
$ dircolors --bourne-shell ~/.dircolors >> ~/.bashrc $ source ~/.bashrc
También puede hacer que Bash resuelva .dircolors al iniciar en lugar de realizar la conversión manualmente. Siendo realistas, probablemente no cambiará los colores con frecuencia, por lo que esto puede ser demasiado agresivo, pero es una opción si planea cambiar mucho su esquema de color. En su archivo .bashrc, agregue esta regla:
[[ -e $HOME/.dircolors ]] && eval "`dircolors --sh $HOME/.dircolors`"
Si tiene un archivo .dircolors en su directorio de inicio, Bash lo evalúa al iniciarse y establece LS_COLORS en consecuencia.
Color
En general, es importante tener en cuenta que los colores en un terminal pueden ser útiles para mejorar la eficiencia y la claridad, pero no deben ser el único medio para transmitir información importante. Si depende demasiado de los colores para transmitir información importante, es posible que no pueda acceder a esa información si alguna vez se encuentra en un entorno sin colores o con colores diferentes. Por lo tanto, es recomendable utilizar los colores de manera judiciosa y asegurarse de que la información esencial también se presente de manera clara y concisa sin depender de ellos.
Dejando esas advertencias a un lado, los colores pueden ser útiles y divertidos en algunos flujos de trabajo, así que cree una base de datos .dircolor y personalícela a su gusto.
Ejemplo
Script para cambiar de color.
#!/bin/bash # Definimos colores, primer plano PNegro='\033[30m' # 1 PRojo='\033[31m' # 2 PVerde='\033[32m' # 3 PNaranja='\033[33m' # 4 PAzul='\033[34m' # 5 PMagenta='\033[35m' # 6 PCian='\033[36m' # 7 PGris='\033[37m' # 8 PBlanco='\e[37m' # 9 NC='\033[39m' # Colores de fondo, video inverso o segundo plano IGris='\033[100m' # 8 Gris oscuro IRojo='\033[101m' # 7 Luz roja IVerde='\033[102m' # 6 Verde claro IAmarillo='\033[103m' # 5 Amarillo IAzul='\033[104m' # 4 Azul claro IMagenta='\033[105m' # 3 Morado claro ICian='\033[106m' # 2 Verde azulado IBlanco='\033[107m' # 1 Blanco INC='\033[40m' clear # ----------- printf "${PRojo}${IAmarillo}" echo "Hola Caracola" printf "${PNegro}${IVerde}" echo "Cada Texto" printf "${PAzul}${ICian}" echo "En un color" printf "${PCian}${IMagenta}" echo "Cian Magenta" printf "${PBlanco}${IMagenta}" echo "Blanco Magenta" printf "${NC}${INC}" echo "Y vuelta a la normalidad" echo "Otros ejemplos" printf "${IBlanco}${PNegro}Fondo Blanco, Letras Negras\n${ICian}${PRojo}Fondo Cian, Letras en Rojo\n${IMagenta}${PVerde}Fondo magenta, letras verdes\n" printf "${IAzul}${PNaranja}Fondo Azul, Letras Naranja\n${IAmarillo}${PAzul}Fondo Amarillo, Letras en Azul\n${IVerde}${PMagenta}Fondo Verde, letras Cian\n" printf "${IRojo}${PCian}Fondo Rojo, Letras Cian\n${IGris}${PBlanco}Fondo Gris, Letras en Blanco\n${IGris}${PNegro}Fondo Gris, letras Negro\n"
Cambiar indicador de Bash actual
Puede ver el estado actual de Bash Prompt ejecutando este comando a continuación:
# echo $PS1 [u@h W]$
De forma predeterminada, el símbolo del sistema está configurado en [u@h W]PS Cada carácter especial de escape con barra invertida se puede decodificar de la siguiente manera:
u
: Muestra el nombre de usuario actual.h
: Muestra el nombre de hostW
: Imprime la base del directorio de trabajo actual.$
: Mostrar # (indica el usuario root) si el UID efectivo es 0; de lo contrario, muestre un $.
Para un usuario de Unix que no sea root, se mostrará como se muestra a continuación:
[linodadmin@centos-01 ~]$
Modificar el indicador de Bash
Como se discutió anteriormente, el indicador de bash está controlado por una variable llamada PS1, y podemos ajustar esta variable en su archivo .bashrc para personalizar su indicador.
Además, si desea que estos cambios estén disponibles para todos los usuarios del sistema en el sistema o globalmente, todo lo que necesita hacer es modificar esta variable en el archivo /etc/bash.bashrc (en sistemas Debian y Ubuntu) o / etc / bashrc (en otras distribuciones de Linux) en lugar de ~ / .bashrc.
Bash le permite utilizar algunos atajos para recuperar detalles, como el nombre de usuario, el nombre del host, el directorio de trabajo actual, fecha y hora, etc. Estos atajos se denominan secuencias de escape.
Tome un ejemplo, desea mostrar el nombre del usuario, el nombre de host, el directorio actual y la hora en formato de 12 horas seguido de $. Luego, se puede recuperar modificando la variable PS1 con estas secuencias de escape que muestran la información requerida como se muestra a continuación:
u
: Muestra el nombre de usuario actual.h
: Muestra el nombre de hostW
: Imprime la base del directorio de trabajo actual.@
: Muestra la hora actual en formato de 12 horas am / pm
$ export PS1="[\u@\h \W \@]\$" [linodadmin@centos-01 ~ 01:50 PM]$
Esto permitirá solo un cambio temporal en su indicador de Bash. Si necesita realizar un cambio permanente en los terminales siguientes, puede editar el archivo ~ .bashrc con este valor de PS1 (PS1 = «[\u@\h \W \@]\ $ «) hacia el final del archivo.
Consulte algunas de las listas de secuencias de escape que nos ayudarán a recuperar la información requerida.
u
Nombre de usuario del usuario actual,w
El directorio de trabajo actualW
El último fragmento del directorio de trabajo actual. Por ejemplo, si se encuentra actualmente en / home / linodadmin / var, esto le dará var.h
El nombre de la computadora, hasta un punto (.). Por ejemplo, si su computadora se llama centos-01.linoxide.com, esto le da centos-01.H
Nombre de host FQDNd
La fecha en formato «Día de la semana Mes Fecha» (por ejemplo, «Martes 21 de marzo»)t
La hora actual en formato de 24 horas HH: MM: SST
La hora actual en formato de 12 horas HH: MM: SS@
La hora actual en formato de 12 horas AM / PMn
Pasa a la siguiente línea.!
: el número de historial de este comando#
: el número de comando de este comando$
: si el UID efectivo es 0, un #, de lo contrario un $j
: el número de trabajos gestionados actualmente por el shell
Agregar colores al mensaje
En su mayoría, a los administradores del sistema les gustaría agregar algo de color a su aburrido indicador de shell. Esto se puede lograr con la ayuda de secuencias de escape ANSI en la variable PS1. Estas secuencias de escape deben incluirse entre [ and ] para que funcione correctamente. De una manera simple, podemos usar esta sintaxis de comando para agregar colores a la línea de comandos.
'mi[x;ym $PS1 e[m'
Where:
e[
: Start color scheme.x;y
: Color pair to use (x;y)$PS1
: Your shell prompt variable.e[m
: Stop color scheme.
Check out the list of color codes which can be used:
txtblk='e[0;30m' # Black - Regular txtred='e[0;31m' # Red txtgrn='e[0;32m' # Green txtylw='e[0;33m' # txtblu='e[0;34m' # Blue txtpur="e[0;35m" # Purple txtcyn='e[0;36m' # Cyan txtwht="e[0;37m" # White bldblk='e[1;30m' # Black - Bold bldred='e[1;31m' # Red bldgrn='e[1;32m' # Green bldylw='e[1;33m' # bldblu='e[1;34m' # Blue bldpur="e[1;35m" # Purple bldcyn='e[1;36m' # Cyan bldwht="e[1;37m" # White unkblk='e[4;30m' # Black - Underline undred='e[4;31m' # Red undgrn='e[4;32m' # Green undylw='e[4;33m' # undblu='e[4;34m' # Blue undpur="e[4;35m" # Purple undcyn='e[4;36m' # Cyan undwht="e[4;37m" # White bakblk='e[40m' # Black - Background bakred='e[41m' # Red bakgrn='e[42m' # Green bakylw='e[43m' # bakblu='e[44m' # Blue bakpur="e[45m" # Purple bakcyn='e[46m' # Cyan bakwht="e[47m" # White txtrst="e[0m" # Text Reset
Suponga que desea usar diferentes colores en una declaración de terminal como si desea mostrar el nombre de usuario y la ruta del directorio en cian, seguido de un símbolo $ en negrita. Debe utilizar secuencias de escape por separado según sea necesario. Por ejemplo, la secuencia de escape para el rojo es e[31m, para el cian, es e[36m, y para, es e[33m. Para texto en negrita, necesitamos usar e[1m. Además, necesitamos restablecer la secuencia de escape ANSI, que evita que los estilos afecten al resto del texto en el shell. La secuencia de reinicio es e[0m. La variable PS1 para esto se verá así.
export PS1='[e[32mu] [e[36mw] [e[33m][e[1m]PS[e[0m]'
La declaración de exportación debe agregarse a su archivo $ HOME / .bashrc para cambios permanentes.
Usando el comando tput
Incluso podemos usar el comando tput para modificar la configuración del indicador. Por ejemplo, para mostrar el indicador de color usando un tput, podemos usar este comando a continuación:
export PS1="[$(tput setaf 3)]u@h:w $ [$(tput sgr0)]"
Lista de algunas de las opciones de la línea de comando tput a continuación:
tput bold
– Efecto atrevidotput rev
– Mostrar colores inversostput sgr0
– Restablecer todotput setaf {CODE}
– Establezca el color de primer plano, consulte la tabla de {CÓDIGO} de colores a continuación para obtener más información.tput setab {CODE}
– Establezca el color de fondo, consulte la tabla de {CÓDIGO} de colores a continuación para obtener más información.
Códigos de color para las opciones de línea de comandos de tput
Consulte los ejemplos que utilizan estos comandos tput a continuación:
-
Linux
- Cambiar la Hora y la Fecha al sistema Linux
- Montar un directorio remoto, vía NFS, en Linux
- Predicciones de Linux para 2025
- Elementary OS 8: una distribución de Linux para usuarios de Windows y macOS
- Renombrar multiples archivos masivamente en Linux (quitar espacios, cambiar mayúsculas) a la vez en Linux
- He utilizado Linux durante 30 años. Aquí hay 5 razones por las que nunca cambiaré a Windows o MacOS
- Mis predicciones sobre Linux para 2025: será un buen año
- ¿Por qué Torvalds eliminó a los encargados rusos del mantenimiento del núcleo de Linux?
- 10 cosas que siempre hago después de instalar Linux (y por qué tú también deberías hacerlo)
- 7 cosas que nunca hago después de instalar Linux (y por qué tú tampoco deberías)
- Detección de Intrusos: Snort, Base, MySQL, y Apache2 en Ubuntu Linux 7.10
- ¿Por qué no más personas usan Linux en el escritorio? Tengo una teoría que quizás no te guste.
- Los países occidentales ricos lideran la expansión mundial del petróleo y el gas
- Systemd 256.1 aborda la queja de que 'systemd-tmpfiles' podría eliminar inesperadamente su directorio /home
- Por qué un kernel Linux de distribución 'congelada' no es la mejor opción para la seguridad