questo potrebbe non ottenere un colore "bello" basato sullo sfondo, ma dovrebbe funzionare, supponendo che il colore di sfondo predefinito sia sempre il colore 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))}')
Per scomporre questo:
tput- restituisce una stringa di controllo del terminalesetaf- la stringa di controllo del terminale; in questo caso,set ANSI foreground$(...)- Sostituzione del comando annidabile BASH per il parametro colorehostname- ottieni il nome hostsum- calcola un semplice checksum sul nome hostawk...-v ncolors=$(...)- impostare la variabile AWKncolorsal valore della sostituzione del comando all'interno di$(...)infocmp -1- visualizzare le informazioni del terminale sul tipo di terminale corrente con 1 parametro per rigaexpand- espandi le tabulazioni in spazi per creare ilsedscript un po' più semplicesed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p"- estrarre il valore dell'interocolorscapacità del terminale
'ncolors>1 {...}'- lo script awk, che esegue il{...}codice solo sencolorsè maggiore di 1print 1 + ($1 % (ncolors - 1))- prendi l'assoluto$1(campo 1 dell'input, che proviene dasum, che significa$1è il valore del checksum), trova il suo resto dopo essere stato diviso per(ncolors - 1)(che ha l'effetto di limitarlo all'intervallo0attraverso(ncolors - 2)), quindi aggiungi1e stampalo.
Potresti essere interessato a context-color , che ho messo insieme sulla base della risposta di J Earls:https://github.com/ramnes/context-color
È un semplice script che, quando eseguito, emette un colore basato sull'hash dell'output di un comando. Con esso installato da qualche parte nel tuo $PATH , potresti fare qualcosa di simile nel tuo .bashrc :
export PS1="$(context-color -p)$PS1\[\e[0m\]"
(dove --prompt/-p è l'opzione in modo che il colore sia sfuggito per i prompt e \[\e[0m\] la sequenza di escape per reimpostare il colore)
Per impostazione predefinita, il comando utilizzato per generare l'hash è whoami; hostname . Se vuoi solo che il colore cambi in base al nome host, puoi cambiare $CONTEXT ambiente variabile (export CONTEXT="hostname" ) o semplicemente usa il --context/-c opzione (context-color -c "hostname" ).
Vedi sotto per un esempio:
