Avanti Indietro Indice

9. Caricare il Colori del Prompt Dinamicamente

9.1 Un esempio che dimostra il concetto

Questa è una dimostrazione del concetto piuttosto che un prompt attraente: cambiare i colori all'interno di un prompt dinamicamente. In questo esempio, il colore dell'hostname cambia in funzione del carico (come un avvertimento).

#!/bin/bash
#   "hostloadcolour" - 17 ottobre 98, Giles
#
#   Qui l'idea e` di cambiare il colore dell'hostname nel prompt, a
#   seconda del valore del carico.

# THRESHOLD_LOAD e` il valore del carico per un minuto (moltiplicato
# per cento) al quale volete che il prompt cambi da COLOUR_LOW a
# COLOUR_HIGH

THRESHOLD_LOAD=200
COLOUR_LOW='1;34'
          # blu chiaro
COLOUR_HIGH='1;31'
          # rosso chiaro

function prompt_command {
ONE=$(uptime | sed -e "s/.*load average: \(.*\...\), \(.*\...\), \(.*\...\)/\1/" -e "s/ //g")
#   A quanto pare, "scale" in bc non funziona con la moltiplicazione,
#   ma funziona con la divisionone.
ONEHUNDRED=$(echo -e "scale=0 \n $ONE/0.01 \nquit \n" | bc)
if [ $ONEHUNDRED -gt $THRESHOLD_LOAD ] 
then 
    HOST_COLOUR=$COLOUR_HIGH
        # rosso chiaro
else
    HOST_COLOUR=$COLOUR_LOW
        # blu chiaro
fi
}

function hostloadcolour {

PROMPT_COMMAND=prompt_command
PS1="[$(date +%H%M)][\u@\[\033[\$(echo -n \$HOST_COLOUR)m\]\h\[\033[0;37m\]:\w]$ "
}

Usando il vostro editor preferito, salvate queso in un file chiamato "hostloadcolour". Se avete il pacchetto Bashprompt installato, Questo funzionerà come un tema. Se no, digitate source hostloadcolour e poi hostloadcolour. In entrambi i modi, "prompt_command" diventa una funzione nel vostro ambiente. Se esaminate il codice, noterete che i colori ($COLOUR_HIGH e $COLOUR_LOW) sono impostati usanto solo un codice del colore parziale, cioè "1;34" invece di "\[\033[1;34m\]", che avrei preferito. Non sono stato in grado di farlo funzionare con il codice completo. Siete pregati di farmi sapere se doveste riuscirvi.


Avanti Indietro Indice