cela pourrait ne pas obtenir une "belle" couleur basée sur l'arrière-plan, mais cela devrait fonctionner, en supposant que la couleur d'arrière-plan par défaut est toujours la couleur 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))}')
Pour décomposer cela :
tput- afficher une chaîne de contrôle de terminalsetaf- la chaîne de contrôle du terminal ; dans ce cas,set ANSI foreground$(...)- Substitution de commande imbriquée BASH pour le paramètre de couleurhostname- obtenir le nom d'hôtesum- calculer une somme de contrôle simple sur le nom d'hôteawk...-v ncolors=$(...)- définir la variable AWKncolorsà la valeur de la substitution de commande dans$(...)infocmp -1- afficher les informations du terminal sur le type de terminal actuel avec 1 paramètre par ligneexpand- développer les tabulations en espaces pour faire lesedscript un peu plus facilesed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p"- extraire la valeur de l'entiercolorscapacité du terminal
'ncolors>1 {...}'- le script awk, qui exécute le{...}code uniquement sincolorsest supérieur à 1print 1 + ($1 % (ncolors - 1))- prendre le$1absolu (champ 1 de l'entrée, qui provient desum, ce qui signifie$1est la valeur de la somme de contrôle), trouvez son reste après avoir été divisé par(ncolors - 1)(ce qui a pour effet de le limiter à la plage0à(ncolors - 2)), puis ajoutez1et imprimez-le.
Vous pourriez être intéressé par context-color , que j'ai rassemblé sur la base de la réponse de J Earls :https://github.com/ramnes/context-color
C'est un script simple qui, lorsqu'il est exécuté, produit une couleur basée sur le hachage de la sortie d'une commande. Avec celui-ci installé quelque part dans votre $PATH , vous pourriez faire quelque chose comme ça dans votre .bashrc :
export PS1="$(context-color -p)$PS1\[\e[0m\]"
(où --prompt/-p est le commutateur pour que la couleur soit échappée pour les invites, et \[\e[0m\] la séquence d'échappement pour réinitialiser la couleur)
Par défaut, la commande utilisée pour générer le hash est whoami; hostname . Si vous voulez juste que la couleur change en fonction du nom d'hôte, vous pouvez changer le $CONTEXT environnement variable (export CONTEXT="hostname" ) ou utilisez simplement le --context/-c choix (context-color -c "hostname" ).
Voir ci-dessous pour un exemple :
