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 AWKncolors
na 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řtesed
skript o něco jednoduššísed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p"
- extrahujte hodnotu celého číslacolors
schopnost terminálu
'ncolors>1 {...}'
- skript awk, který spouští{...}
kód pouze pokudncolors
je větší než 1print 1 + ($1 % (ncolors - 1))
- vezměte absolutní$1
(pole 1 vstupu, který pochází zsum
, což znamená$1
je hodnota kontrolního součtu), najděte jeho zbytek po vydělení(ncolors - 1)
(což má za následek omezení na rozsah0
až(ncolors - 2)
), pak přidejte1
a 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: