Personnaliser le prompt

L’habillage du prompt en mode console n’est pas uniquement une question d’esthétique. Souvent négligé par de nombreuses distributions, le prompt est la première source d’information transmise à l’utilisateur ou à l’administrateur.

Parmi les données utiles qu’il peut transmettre, on peut trouver :

  • la couleur pour indiquer la différence entre les sessions « root » et les autres,
  • la localisation (dans quel répertoire sommes nous),
  • l’heure,
  • etc…

La variable de personnalisation du prompt sous Bash et ses dérivés est « PS1 ».

fhh@mafalda ~ $ echo ${PS1}
\033[01;32m\u@\h\033[01;34m \w \$\033[00m 
fhh@mafalda ~ $

Dans la plupart des distributions le prompt est initialisé dans « /etc/profile » ou dans les fichiers de configuration de bash (« /etc/bash/bashrc », « /etc/bash.bashrc »). Sous Gentoo Linux par exemple, on peut lire dans « /etc/bash/bashrc » :

if ${use_color} ; then
...
        if [[ ${EUID} == 0 ]] ; then
                PS1='\033[01;31m\h\033[01;34m \W \$\033[00m '
        else
                PS1='\033[01;32m\u@\h\033[01;34m \w \$\033[00m '
        fi
...
else
        if [[ ${EUID} == 0 ]] ; then
                # show root@ when we don't have colors
                PS1='\u@\h \W \$ '
        else
                PS1='\u@\h \w \$ '
        fi
fi

L’utilisateur désireux de modifier l’affichage de son prompt définira ses nouveaux paramètres dans « ~/.bashrc » ou « ~/.bash_profile ».

Les séquences d’échappement pouvant être utilisée pour le prompt sont principalement les suivantes :

  • \a alarme (le bip) ;
  • \\ un bad slash ;
  • \[ démarre une séquence de caractères non imprimable, interprété par le prompt (ex : définition de couleur, etc…) ;
  • \d la date au format “ ” (exemple : “Tue May 26?) ;
  • \] fin de séquence non imprimable ;
  • \H le nom de la machine ;
  • \h le nom de la machine avant le premier `.’ ;
  • \$ si l’UID est 0, affiche #, sinon, affiche $ ;
  • \n retour chariot (saut/nouvelle ligne) ;
  • \nnn le caractère octal nnn ;
  • \s nom du shell, (équivaut à basename $0) ;
  • \# numéro de la commande saisie dans ce terminal ;
  • \@ l’heure courante (format 12-heures am/pm) ;
  • \! numéro de la commande dans l’historique ;
  • \T l’heure courante (format 12-heures HH:MM:SS) ;
  • \t l’heure courante (format 24-heures HH:MM:SS) ;
  • \u login utilisateur ;
  • \V la version de bash complète (ex : 2.00.0) ;
  • \v la version de bash (format court ex : 2.00) ;
  • \W répertoire courant (basename de \w) ;
  • \w répertoire courant (chemin complet).

Il est possible d’ajouter au prompt toute séquences retournant d’une commande du shell. Pour ajouter l’affichage de l’heure au format « HH:mm » au prompt classique en utilisant la commande date, « PS1 » pourra être définit ainsi :

17:33 srv ~ # cat .bash_profile 
export PS1="\033[0;37m\$(date +%H:%M) $PS1"

(Attention, dans cet exemple, comme vous l’aurez compris, Bash lance la commande « date +%H:%M » à chaque commande saisie…)

L’application d’une couleurs est  définie par \033[<code couleur>m.

Avec « <code couleur> » une des valeurs suivante : 0;30 noir ; 1;30 gris ; 0;34 bleu ; 1;34 bleu clair ; 0;32 vert ; 1;32 vert clair ; 0;36 cyan ; 1;36 cyan clair ; 0;31 rouge ; 1;31 rouge clair ; 0;35 violet ; 1;35 rose ; 0;33 marron ; 1;33 jaune ; 0;37 gris clair ; 1;37 blanc ; 0 retour aux valeurs par défaut.

La couleur reste appliquée jusqu’à la demande de retour aux paramètres par défaut (\[\033[0m\]) ou la définition d’une autre couleur.

La couleur d’arrière plan peu être modifiée de la même manière que le texte avec des valeurs comprises entre 40 et 47 (représentant dans l’ordre noir, rouge, vert, jaune, bleu, rose, cyan et gris clair).

Par exemple :

echo -e "\033[01;32m\033[44mHello world\033[0m"

affiche « Hello world » en vert sur fond bleu. L’ensemble peut être raccourci en précisant en une seule instruction, la couleur de fond, celle du texte et éventuellement un (ou des) paramètre(s) d’action(s) :

echo -e "\033[05;01;32;44mHello world\033[0m"

Affiche « Hello world » en vert (32), gras (01), clignotant (05) sur fond bleu (44).

Le script suivant affiche une grille des différentes combinaisons possible :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash
 
# Texte de l'exemple ( >= 3 caractères ) :
TEXT="Bash" ;
 
# Couleur du texte :
declare -a FG=('' '1' '2' '4' '5' '7' '22' '24' '27' '30' '1;30' \
'31' '1;31' '32' '1;32' '33' '1;33' '34' '1;34' '35' '1;35' '36' \
'1;36' '37' '1;37' '38' '39') ;
 
# Première ligne :
printf "FG \ BG\t%${#TEXT}s  " ;
for bg in {40..47} ; do
        printf "%${#TEXT}sm  " ${bg} ;
done
echo ;
 
# Création du tableau de présentation des combinaisons forground / background :
for fg in ${!FG[*]} ; do
        echo -ne "${FG[fg]}m\t\033[${FG[fg]}m $TEXT " ;
        for bg in {40..47} ; do
                echo -ne "\033[${FG[fg]}m\033[${bg}m $TEXT \033[0m " ;
        done
        echo ;
done
 
# Comment déclarer une couleur :
echo ;
echo "  Format de déclaration : \\033[FG\\033[BG." ;
echo "  Retour aux paramètres par défaut : \033[0m" ;
echo

Télécharger le script « tableColors ».

3 réflexions au sujet de « Personnaliser le prompt »

  1. Merci beaucoup, je cherchais où se trouvait ce fichier « .bashrc » sur ma version 12.04 LTS Ubuntu afin de modifier un peu mon terminal!

    1. Pas nécessairement, exemple directement dans « ~/.bashrc » en fin de fichier :

      ...
      PS1='[33[0;37m]t [33[01;32m][33[01;32m]u@h[33[01;34m] w $[33[00m] '

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *