Es posible que esto no obtenga un color "agradable" según el fondo, pero debería funcionar, suponiendo que el color de fondo predeterminado siempre sea el color 0
:
tput setaf $(hostname | sum | awk -v ncolors=$(infocmp -1 | expand | sed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p") 'ncolors>1 {print 1 + ($1 % (ncolors - 1))}')
Para desglosar esto:
tput
- generar una cadena de control de terminalsetaf
- la cadena de control del terminal; en este caso,set ANSI foreground
$(...)
- Sustitución del comando anidado BASH para el parámetro de colorhostname
- obtener el nombre de hostsum
- calcular una suma de comprobación simple en el nombre de hostawk
...-v ncolors=$(...)
- establecer la variable AWKncolors
al valor de la sustitución del comando dentro de$(...)
infocmp -1
- mostrar la información del terminal sobre el tipo de terminal actual con 1 parámetro por líneaexpand
- expandir pestañas a espacios para hacer elsed
guión un poco más fácilsed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p"
- extrae el valor del enterocolors
capacidad de terminal
'ncolors>1 {...}'
- el script awk, que ejecuta el{...}
código solo sincolors
es mayor que 1print 1 + ($1 % (ncolors - 1))
- tomar el absoluto$1
(campo 1 de la entrada, que proviene desum
, que significa$1
es el valor de la suma de comprobación), encuentre su resto después de dividirlo por(ncolors - 1)
(que tiene el efecto de limitarlo al rango0
a través de(ncolors - 2)
), luego agrega1
e imprimirlo.
Puede que te interese context-color
, que he reunido en base a la respuesta de J Earls:https://github.com/ramnes/context-color
Es un script simple que, cuando se ejecuta, genera un color basado en el hash de salida de un comando. Con él instalado en algún lugar de tu $PATH
, podrías hacer algo como esto en tu .bashrc
:
export PS1="$(context-color -p)$PS1\[\e[0m\]"
(donde --prompt/-p
es el interruptor para que el color se escape para las indicaciones, y \[\e[0m\]
la secuencia de escape para restablecer el color)
De forma predeterminada, el comando utilizado para generar el hash es whoami; hostname
. Si solo desea que el color cambie de acuerdo con el nombre de host, puede cambiar el $CONTEXT
entorno variable (export CONTEXT="hostname"
) o simplemente use el --context/-c
opción (context-color -c "hostname"
).
Vea a continuación un ejemplo: