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 AWKncolors
al 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 ilsed
script un po' più semplicesed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p"
- estrarre il valore dell'interocolors
capacità 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'intervallo0
attraverso(ncolors - 2)
), quindi aggiungi1
e 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: