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 lesed
script un peu plus facilesed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p"
- extraire la valeur de l'entiercolors
capacité du terminal
'ncolors>1 {...}'
- le script awk, qui exécute le{...}
code uniquement sincolors
est supérieur à 1print 1 + ($1 % (ncolors - 1))
- prendre le$1
absolu (champ 1 de l'entrée, qui provient desum
, ce qui signifie$1
est 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 ajoutez1
et 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 :