LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado
 

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 host
  • W : 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 host
  • W : 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 actual
  • W 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 FQDN
  • d 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: SS
  • T La hora actual en formato de 12 horas HH: MM: SS
  • @ La hora actual en formato de 12 horas AM / PM
  • n 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 atrevido
  • tput rev – Mostrar colores inversos
  • tput sgr0 – Restablecer todo
  • tput 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:

No estás registrado para postear comentarios



Redes:



   

 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías