nov 22
Mettez de la couleur dans votre « prompt » !
Le « prompt », que l’on désigne par « invite de commande » en français est une chaîne de caractères indiquant que l’ordinateur est prêt à recevoir une saisie au clavier.
Les informations qui suivent concernent le shell livré par défaut avec la plupart des distributions, le bien nommé « Bash ».
Le « prompt » est défini dans une variable d’environnement nommée « PS1 », celle-ci peut contenir des données statiques mais également des « séquences d’échappement » spéciales permettant d’afficher des données dynamiques comme le nom d’utilisateur courant, le répertoire courant, etc. Il est également possible de mettre de la couleur afin d’égayer un peu votre terminal et surtout de vous retrouvez dans vos différents comptes utilisateurs ou dans vos différentes machines.
Voici la liste des séquences d’échappement intéressantes :
\h : le nom de la machine (hostname) jusqu'au premier point
\H : le nom de la machine complet
\j : le nombre de processus fils lancés en arrière plan
\e : caractère d'échappement (utile pour les couleurs)
\n : nouvelle ligne
\r : retour chariot
\u : le nom d'utilisateur courant
\w : le chemin complet du répertoire de travail courant
\W : le répertoire de travail courant
\$ : affiche un # si l'utilisateur est root sinon affiche un $
\[ : début d'une séquence de caractères non imprimables
\] : fin d'une séquence de caractères non imprimables
\D{format} : la date selon le format passé en paramètre (cf. la syntaxe de « strftime »)
Les couleurs quant à elles sont des « séquences d’échappement ANSI » entourées d’un début et d’une fin de séquence de caractères non imprimables. Ces séquences ont un format bien déterminé : celui-ci commence par « ESC[ » et se termine par « m ». Entre ces deux parties, il faut indiquer un code de mise en forme (gras, souligné, clignotement, etc) ainsi qu'un code pour la couleur désirée, les deux champs étant séparés par un point-virgule.
Voici la liste des mises en forme les plus courantes :
0 : normal 1 : gras 4 : souligné 5 : clignotement 7 : négatif 22 : désactivation du gras 24 : désactivation du souligné 25 : désactivation du clignotement
Et la liste des couleurs :
0 : noir 1 : rouge 2 : vert 3 : jaune 4 : bleu 5 : magenta 6 : cyan 7 : blanc
À ces dernières doit être additionné un nombre afin de définir si l'on veut modifier la couleur du fond ou du texte tout en réglant l'intensité :
30 : couleur du texte, intensité normale 40 : couleur du fond, intensité normale 90 : couleur du texte, intensité élevée 100 : couleur du fond, intensité élevée
Pour voir votre PS1 actuel, tapez simplement dans un shell :
user@gnusquad:~$ echo $PS1 \[\e[1;42m\]\u@\H\[\e[0;40m\]:\w\$
Décortiquons cette ligne :
\[ : début d'une séquence de caractères non imprimables (pour la couleur) \e[ : début d'une séquence ANSI 1;42 : mise en forme grasse avec une couleur de fond verte intensité normale m : fin d'une séquence ANSI \] : fin d’une séquence de caractères non imprimables \u : nom d'utilisateur courant @ : signe @ \H : nom de la machine complète \[ : début d'une séquence de caractères non imprimables \e[ : début d'une séquence ANSI 0;40 : mise en forme normale avec une couleur de fond noir intensité normale m : fin d'une séquence ANSI \] : fin d’une séquence de caractères non imprimables : : signe : \w : chemin complet du répertoire de travail courant \$ : caractère # si l'utilisateur est root sinon caractère $
Pour tester vos créations (ici un fond rouge qui peut être pratique pour l’utilisateur « root »), il vous suffira de taper dans un shell :
user@gnusquad:~$ PS1='\[\e[1;41m\]\u@\H\[\e[0;40m\]:\w\$' user@gnusquad:~$
Une fois satisfait de votre « PS1 », vous n’aurez plus qu’à le mettre dans le fichier « /etc/bash.bashrc » (pour tous les utilisateurs) ou dans votre fichier « ~/.bashrc » (pour vous uniquement).
Notez au passage qu’il existe aussi trois autres variables d’environnement « PS2 », « PS3 » et « PS4 » que je vous laisse découvrir dans le man de bash !
N’hésitez pas à proposer vos « prompt » en commentaires !
Sources :
- Man page de Bash
- Séquence d’échappement
- Man page de la fonction strftime
- Séquences d’échappement ANSI

Le 24 novembre 2008 à 10:57
Dans Lenny, si on force la colorisation on obtient :
PS1=’${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ‘
On peut voir que ‘\e[' est remplacé par '\033['.
Comme j'exécute souvent des commandes en arrière-plan, j'utilise cette valeur de PS1 :
'${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\] (\j)\$ ‘
Ce qui évite à avoir à exécuter la commande ‘jobs’.
Le 24 novembre 2008 à 11:40
Le \O33 est en fait de l’octal qui correspond au \e.
Perso je trouve plus lisible l’écriture avec le \e déjà que c’est le bordel comme ça !
Le 27 novembre 2008 à 22:46
Voici le mien :
PS1=”\n\[\e[1;31;40m\u \e[1;35;40m\h \e[1;33;40m\t\e[0m\n\e[1;25;32;40m\w\e[1;37;40m\n\$ \[033[1;32m\]”
le retour à la ligne entre 2 commandes apporte, AMHA, beaucoup de lisibilité. :^)
Le 27 novembre 2008 à 23:13
Le mix des couleurs est sympa mais perso 3 lignes pour un simple prompt je trouve que ça fait beaucoup mais ça en intéressera sûrement d’autres