He usado colores de vez en cuando en las secuencias de comandos Bash (principalmente en CentOS), pero para hacer que su uso sea más conveniente, termino redefiniendo las variables a valores de color:
local GRAY="\[\033[1;30m\]"
local LIGHT_GRAY="\[\033[0;37m\]"
local CYAN="\[\033[0;36m\]"
local LIGHT_CYAN="\[\033[1;36m\]"
local NO_COLOUR="\[\033[0m\]"
o también con tput
:
bold=`tput bold`
normal=`tput sgr0`
whitef=`tput setaf 7`
greenf=`tput setaf 2`
redb=`tput setab 1`
Recorrí el /etc/rc.d/init.d
directorio pero no encontré nada relacionado con las definiciones de color allí.
¿Existe tal definición ya en su lugar? Si no, los pondría en un archivo, /etc/rc.d/init.d
por ejemplo, y lo incluiría en mis scripts, un poco como con/etc/rc.d/init.d/functions
\e[1;30m
, por ejemplo, técnicamente no representa el gris, sino que la ranura de color generalmente se muestra en gris por un terminal. Los emuladores de terminal son libres de cambiar los colores reales de la pantalla y, a menudo, los convierten en una opción configurable por el usuario.Respuestas:
Hay varios aspectos en juego en lo que estás preguntando.
Primero, bash no define los colores. De hecho, bash no tiene ni idea de que existan colores. Todo lo que sabe es que le dijiste que mostrara los caracteres
\033[0;36m
. Su emulador de terminal (xterm, gnome-terminal, lo que sea) recibe estos caracteres y entiende "Necesito comenzar a emitir en cian".Por lo tanto, es su emulador de terminal el que entiende los colores. Su emulador de terminal entiende que
\033[0;36m
es cian, pero otro emulador de terminal podría usar un conjunto de caracteres completamente diferente para cian (aunque ningún emulador de terminal sensato haría alarde del estándar y haría esto). Este es el motivotput
. Cuando ejecutetput setaf 6
,tput
buscará los códigos de escape de su terminal para el color 6 (cian) y generará ese código de escape.(vea esta pregunta para obtener más información sobre los
tput setaf
códigos)Ahora de vuelta a la fiesta. Como habrás notado, cuando me he referido al color cian, he estado usando
\033[0;36m
, no\[\033[0;36m\]
. Faltan los corchetes. El propósito de los corchetes es que cuando se usan códigos de escape (colores) en la solicitud, bash tiene que saber qué caracteres no se imprimen (ancho cero, en realidad no muestran nada). Por lo tanto, incluye caracteres que no se imprimen\[
\]
. Si elimina estos caracteres, todo puede parecer que funciona bien al principio, pero comenzará a encontrarse con todo tipo de rarezas cuando su comando exceda el ancho del terminal. Esto se debe a que al escribir, bash debe saber cuándo el comando debe pasar a la siguiente línea. Para hacer esto, calcula el ancho de la solicitud y luego el ancho de cuánto ha escrito.Otra nota, sobre
tput
. NoCYAN="\[\033[0;36m\]"
es lo mismo queCYAN="$(tput setaf 6)"
. Como acabamos de comentar, los corchetes son relevantes para bash, ytput
solo generará los códigos de escape del terminal.Dado que los corchetes generalmente solo son relevantes en la solicitud, si usa colores en la salida de un script o algo así, no debe usarlos. Lo que significa que si va a utilizar colores para más que indicaciones, debe definir múltiples variables. Uno con corchetes para usar en el indicador y otro sin todo lo demás. Aunque podría agregar manualmente los corchetes cada vez que haga referencia a un color en la solicitud.
En resumen, probablemente quieras definir algo como:
fuente
Ctrl
+Alt
+F1
?