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 AWKncolorsal 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 elsedguión un poco más fácilsed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p"- extrae el valor del enterocolorscapacidad de terminal
'ncolors>1 {...}'- el script awk, que ejecuta el{...}código solo sincolorses mayor que 1print 1 + ($1 % (ncolors - 1))- tomar el absoluto$1(campo 1 de la entrada, que proviene desum, que significa$1es 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 rango0a través de(ncolors - 2)), luego agrega1e 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:
