GNU/Linux >> Tutoriales Linux >  >> Linux

¿Están definidas en algún lugar las secuencias de escape de color terminal para Bash?

He usado colores de vez en cuando en Bash scripting (principalmente en CentOS), pero para que su uso sea más conveniente termino redefiniendo 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`

He buscado en /etc/rc.d/init.d directorio pero no encontré nada relacionado con las definiciones de color allí.

¿Ya existe tal definición? Si no, los pondría en un archivo en /etc/rc.d/init.d por ejemplo, e incluirlo en mis scripts, un poco como con /etc/rc.d/init.d/functions

Respuesta aceptada:

Hay varios aspectos en juego en lo que estás preguntando.

Primero, bash no define colores. De hecho, bash no tiene ni idea de que los colores existen. Todo lo que sabe es que le dijiste que emitiera los caracteres \033[0;36m . Su emulador de terminal (xterm, gnome-terminal, lo que sea) recibe estos caracteres y entiende "Necesito comenzar a generar 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 en su sano juicio haría alarde del estándar y haría esto). Esta es la razón de tput . Cuando ejecutas tput setaf 6 , tput buscará los códigos de escape de su terminal para el color 6 (cian) y generará ese código de escape.

Ahora volvamos a bash. Como habrás notado, cuando me he referido al color cian, he estado usando \033[0;36m , no \[\033[0;36m\] . Los corchetes han desaparecido. El propósito de los corchetes es que cuando se usan códigos de escape (colores) en el indicador, bash tiene que saber qué caracteres no se imprimen (ancho cero, en realidad no muestran nada). Por lo tanto, encierra caracteres no imprimibles en \[ \] . 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 de la terminal. Esto se debe a que, al escribir, bash debe saber cuándo debe pasar el comando a la siguiente línea. Para hacer esto, calcula el ancho del indicador y luego el ancho de cuánto ha escrito.

Otra nota, sobre tput . CYAN="\[\033[0;36m\]" es no lo mismo que CYAN="$(tput setaf 6)" . Como acabamos de comentar, los corchetes son relevantes para bash y tput solo va a generar los códigos de escape del terminal.

Relacionado:Linux:¿Linux es un Unix?

Dado que los corchetes generalmente solo son relevantes en el indicador, si está usando colores en la salida de un script o algo así, no debe usarlos. Lo que significa que si va a usar colores para más que indicaciones, debe definir múltiples variables. Uno con corchetes para usar en el indicador y otro sin corchetes para todo lo demás. Aunque podría agregar manualmente los corchetes cada vez que haga referencia a un color en el indicador.

Para resumir, probablemente quieras definir algo como:

local CYAN="$(tput setaf 6)" # OR CYAN="\033[0;36m"
local LIGHT_CYAN="$CYAN$(tput bold)" # OR LIGHT_CYAN="\033[1;36m"
local PROMPT_CYAN="\[$CYAN\]"
local PROMPT_LIGHT_CYAN="\[$LIGHT_CYAN\]"

Linux
  1. ¿Cuál es el propósito de la palabra clave "do" en Bash For Loops?

  2. Ssh:¿configurar los colores de la terminal de la máquina local para usar los de la máquina en la que entro Ssh?

  3. ¿Qué son los separadores de palabras de Readline?

  4. Tput:¿No hay valor para $término y no se especifica?

  5. Hyper:la mejor aplicación de terminal para Linux

20 herramientas de productividad para la terminal Linux

Una introducción al emulador de terminal DomTerm para Linux

¿Beneficio objetivo de las secuencias de escape sobre Tput?

El Bash FOR Loop explicado y simplificado

3 reproductores multimedia de música para la terminal Debian 10

Los 30 mejores emuladores de terminal Linux y editores Bash