Tutti i colori nella shell

La shell è un programma che permette di interagire con il sistema operativo e, come tutti i programmi, è governato da un certo numero di file di configurazioni all’interno dei quali sono riportate tutte le direttive necessarie. Ogni distribuzione ne imposta un certo numero in maniera tale da conferirle un certo grado di personalizzazione: prompt colorati, specifiche informazioni a fianco del cursore e altro ancora. Il risultato è ottenuto agendo sulle variabili preposte per questi compiti.
Tali variabili sono 4: PS1, PS2, PS3 e PS4. La descrizione completa si trova nella pagina di manuale man bash nella sezione Shell Variables. In questo contesto la variabile di nostro interesse è PS1. A seconda delle necessità potremmo voler concatenare le nuove direttive a quelle correnti o sovrascriverle, sia al livello globale e/o locale (valido solo per un utente). Ipotizziamo di voler cambiare le impostazioni solo per l’utente corrente. Il file di configurazione da prendere in considerazione è .bashrc nella home utente: trattasi di un file nascosto poiché inizia con un punto. Ad esempio per cambiare colore in azzurro aggiungiamo le seguenti righe all’inizio.

PS1_AZZURRO="\[\033[36m\]"
PS1_RESET="\[\033[0m\]"

per poi concatenarle al valore PS1 predefinito dagli sviluppatori della distribuzione e al reset del colore (se non “azzerassimo” il colore tutto l’output del terminale assumerebbe il colore impostato con la precedente direttiva, provare per credere).
L’intera stringa così ottenuta la assegniamo alla variabile PS1 con la riga:

export PS1="$PS1_AZZURRO$PS1$PS1_RESET"

da aggiungere alla fine del file: Per sovrascrivere le attuali impostazioni è sufficiente assegnare le nuove direttive alla variabile PS1 alla fine del file. Ad esempio:

export PS1="[\e[1;36;40m\]\t \[\033[0m\]\u@\h \w]\\$ "

È possibile affidarsi a generatori online, come bashrcgenerator per poi affinare il risultato. Per i codici dei colori è sufficiente scrivere su un’unica linea la seguente istruzione per prendere, poi, il colore di interesse:

for x in {0..8}; do for i in {30..37}; do for a in {40..47}; do echo -ne "\e[$x;$i;$a""m\\\ e[$x;$i;$a""m\e[0;37;40m "; done; echo; done; done; echo ""

oppure in questa forma

for x in {0..8}; do 
    for i in {30..37}; do 
       for a in {40..47}; do 
          echo -ne "\e[$x;$i;$a""m\\\e[$x;$i;$a""m\e[0;37;40m"; 
       done 
       echo 
    done
done 
echo ""

per maggiore leggibilità in uno script.

Potrebbero interessarti anche...