toto nemusí získat "pěknou" barvu na základě pozadí, ale mělo by to fungovat, za předpokladu, že výchozí barva pozadí je vždy barva 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))}')
Jak to rozebrat:
tput- výstup řídicího řetězce terminálusetaf- řídicí řetězec terminálu; v tomto případěset ANSI foreground$(...)- Náhrada vnořitelného příkazu BASH pro parametr colorhostname- získat název hostitelesum- vypočítat jednoduchý kontrolní součet pro název hostiteleawk...-v ncolors=$(...)- nastavte proměnnou AWKncolorsna hodnotu substituce příkazu v rámci$(...)infocmp -1- zobrazit informace o terminálu o aktuálním typu terminálu s 1 parametrem na řádekexpand- rozbalte tabulátory na mezery a vytvořtesedskript o něco jednoduššísed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p"- extrahujte hodnotu celého číslacolorsschopnost terminálu
'ncolors>1 {...}'- skript awk, který spouští{...}kód pouze pokudncolorsje větší než 1print 1 + ($1 % (ncolors - 1))- vezměte absolutní$1(pole 1 vstupu, který pochází zsum, což znamená$1je hodnota kontrolního součtu), najděte jeho zbytek po vydělení(ncolors - 1)(což má za následek omezení na rozsah0až(ncolors - 2)), pak přidejte1a vytisknout jej.
Mohlo by vás zajímat context-color , který jsem sestavil na základě odpovědi J Earls:https://github.com/ramnes/context-color
Je to jednoduchý skript, který po spuštění vypíše barvu na základě hash výstupu příkazu. S tím, že je nainstalován někde ve vašem $PATH , můžete něco takového udělat ve svém .bashrc :
export PS1="$(context-color -p)$PS1\[\e[0m\]"
(kde --prompt/-p je přepínač, aby byla barva u výzev uvozena, a \[\e[0m\] sekvence escape pro resetování barvy)
Ve výchozím nastavení je příkaz použitý ke generování hashe whoami; hostname . Pokud chcete, aby se barva měnila podle názvu hostitele, můžete změnit $CONTEXT proměnné prostředí (export CONTEXT="hostname" ) nebo jednoduše použijte --context/-c možnost (context-color -c "hostname" ).
Příklad viz níže:
