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-Variablencolorsauf 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, umsedzu erstellen Skript etwas einfachersed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p"- extrahieren Sie den Wert der GanzzahlcolorsTerminalfähigkeit
'ncolors>1 {...}'- das awk-Skript, das{...}ausführt Code nur wennncolorsgrößer als 1- ist
print 1 + ($1 % (ncolors - 1))- nimm das absolute$1(Feld 1 der Eingabe, die vonsumkommt , was$1bedeutet der Prüfsummenwert ist), finde seinen Rest nach Division durch(ncolors - 1)(was zur Folge hat, dass es auf den Bereich0begrenzt wird bis(ncolors - 2)), fügen Sie dann1hinzu 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:
