Dies ergibt möglicherweise keine "schöne" Farbe basierend auf dem Hintergrund, aber es sollte funktionieren, vorausgesetzt, die Standardhintergrundfarbe ist immer Farbe 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))}')
Um das aufzuschlüsseln:
tput
- einen Terminal-Steuerstring ausgebensetaf
- die Terminal-Steuerzeichenfolge; in diesem Fallset ANSI foreground
$(...)
- Ersetzung des verschachtelbaren BASH-Befehls für den Farbparameterhostname
- Holen Sie sich den Hostnamensum
- Berechnung einer einfachen Prüfsumme für den Hostnamenawk
...-v ncolors=$(...)
- Setzen Sie die AWK-Variablencolors
auf den Wert der Befehlssubstitution innerhalb von$(...)
infocmp -1
- Anzeige der Terminalinformationen über den aktuellen Terminaltyp mit 1 Parameter pro Zeileexpand
- Erweitern Sie Tabulatoren zu Leerzeichen, umsed
zu erstellen Skript etwas einfachersed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p"
- extrahieren Sie den Wert der Ganzzahlcolors
Terminalfähigkeit
'ncolors>1 {...}'
- das awk-Skript, das{...}
ausführt Code nur wennncolors
größer als 1- ist
print 1 + ($1 % (ncolors - 1))
- nimm das absolute$1
(Feld 1 der Eingabe, die vonsum
kommt , was$1
bedeutet der Prüfsummenwert ist), finde seinen Rest nach Division durch(ncolors - 1)
(was zur Folge hat, dass es auf den Bereich0
begrenzt wird bis(ncolors - 2)
), fügen Sie dann1
hinzu und drucken Sie es aus.
Vielleicht interessiert Sie context-color
, die ich basierend auf der Antwort von J Earl zusammengestellt habe:https://github.com/ramnes/context-color
Es ist ein einfaches Skript, das bei seiner Ausführung eine Farbe basierend auf dem Hash einer Befehlsausgabe ausgibt. Wenn es irgendwo in Ihrem $PATH
installiert ist , könnten Sie so etwas in Ihrem .bashrc
tun :
export PS1="$(context-color -p)$PS1\[\e[0m\]"
(wobei --prompt/-p
ist der Schalter, damit die Farbe für Eingabeaufforderungen maskiert wird, und \[\e[0m\]
die Escape-Sequenz zum Zurücksetzen der Farbe)
Standardmäßig ist der zum Generieren des Hashs verwendete Befehl whoami; hostname
. Wenn Sie nur möchten, dass sich die Farbe entsprechend dem Hostnamen ändert, können Sie den $CONTEXT
ändern Variablenumgebung (export CONTEXT="hostname"
) oder verwenden Sie einfach den --context/-c
Option (context-color -c "hostname"
).
Siehe unten für ein Beispiel: