Personnaliser le prompt en bash

Demander un devis
Je souhaite télécharger le programme ou imprimer le programme
  • Imprimer

Pré-requis

 

Pour comprendre pleinement ce tutoriel, vous aurez besoin d'avoir compris les concepts abordés les articles suivants :

Premiers pas en shell

La configuration sous Linux

L'éditeur texte nano

 

Ce tutoriel est orienté pour les distributions basées sur Debian (Ubuntu, Xandros, ...).


Fichiers de configuration

 

Pour personnaliser l'invite de commande bash nous allons devoir modifier quelques fichiers de configuration relatifs à bash.

Voici les fichiers qui configurent un bash à son lancement :

  • /etc/profile : ce fichier est chargé quel que soit le shell utilisé (en particulier bash) et quel que soit l'utilisateur. Il ne doit pas contenir d'instruction spécifiques à bash, car sinon cela risque de perturber les autres shells.
  • /etc/bash.bashrc : ce fichier est chargé par tous utilisateurs au lancement d'un bash. Selon la distribution Linux ce fichier peut porter un nom légèrement différent, par exemple /etc/bash/bashrc.
  • ~/.bash_login : ce fichier est spécifique à un utilisateur (en tant que fichier situé dans son home directory) quand il se loggue. Ce fichier n'existe pas forcément, donc si vous en avez besoin n'hésitez pas à le créer.
  • ~/.bashrc : ce fichier est chargé au lancement d'un bash par cet utilisateur. C'est un contexte un peu plus général que se logguer (typiquement lorsqu'on lance la commande "bash").

Concrètement nous allons travailler dans ~/.bashrc car nous ne souhaitons pas forcément modifier le prompt des autres utilisateurs. On aurait pu travailler dans /etc/bash.bashrc  pour modifier tous les prompts d'un coup.

 

Personnaliser le prompt

 

Variables d'environnements shell

 

Concrètement, l'allure du prompt est stockée dans la variable d'environnement PS1. Ce sont des valeurs conservées en mémoire et qui sont initialisées à l'aide de fichiers de configuration. On peut ensuite créer, ajouter ou modifier leur valeur.

 

Pour afficher les variables d'environnment il suffit de lancer la commande :

 

env

 

Pour voir la valeur de la variable PS1 :

 

echo $PS1

 

Concrètement cette valeur est initialisée dans les fichiers de configurations de bash (/etc/bash.bashrc et ~/.bashrc). Nous allons corriger son initialisation dans ~/.bashrc.

Modification du profil

 

Pour modifier le fichier ~/.bashrc nous allons utiliser l'éditeur texte nano. On peut bien entendu utiliser n'importe quel éditeur texte (vi , emacs...), mais celui-ci doit être lancé avec des droits suffisants pour modifier le fichier en question

 

Commencez par vérifier que ce fichier existe bien en tapant :

 

ls -a ~

 

Si c'est le cas, on va le sauvegarder au cas où.

 

cp ~/.bashrc ~/.bashrc.bak

 

Relevez ensuite la valeur de la variable d'environnement TERM, nous en aurons besoin plus tard.

 

echo $TERM

 

À présent lançons nano.

 

nano ~/.bashrc

 

Si ce fichier existe, vous devriez voir apparaître dans la liste le fichier ~/.bashrc. Sinon vous verrez nano afficher un fichier vide. Lorsque vous voulez quitter nano, appuyez sur ctrl x (le raccourci est rappelé au bas de l'écran).

 

Le fichier existe, mais impossible de l'ouvrir ou de le modifier

 

Comme notre utilisateur a normalement des droits suffisants pour modifier ce fichier, ceci ne devrait pas poser problème. Vous devriez voir apparaître le contenu de ce fichier.

 

Remarque : si ce n'est pas le cas, votre utilisateur n'a pas les droits en lecture sur ce fichier.

  • Si le fichier s'ouvre en lecture seule, votre utilisateur n'a pas les droits en écriture sur ce fichier.
  • Si vous êtes dans ce cas, demandez-vous si cette erreur est légitime (modifiez vous bien le fichier que vous croyez ?).

Si les droits vous paraissent mal définis, c'est probablement que vous avez créé ce fichier en root par le passé. Logguez-vous en root et corrigez ces droits avec les commandes suivantes (ici pour l'utilisateur mando) :

 

chown mando:mando ~/.bashrc

chmod 600 ~/.bashrc

 

Le fichier existe, comment dois-je le corriger ?

 

En descendant dans le fichier avec la flèche du bas, vous devriez voir deux section de code qui ressemblent à celles qui suivent. Si devant ces lignes figurent des caractères #, supprimez-les.

 

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color) color_prompt=yes;;
esac

 

Cette première section de code initialise une variable color_prompt à la valeur yes si la variable d'environnement TERM contient la chaîne de caractère xterm-color. Si elle contient la valeur "xterm", corrigez simplement cette section de sorte à avoir :

 

# set a fancy prompt (non-color, unless we know we "want" color)
 case "$TERM" in
     xterm|xterm-color) color_prompt=yes;;
 esac

 

Un peu plus loin dans ce fichier, vous devriez voir ceci :

 



if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

 

Voyons à présent leur signification

  • \u est substitué par le login de l'utilisateur (par exemple mando),
  • \h est substitué par le nom de la machine (par exemple velvet),
  • \w est substitué par le répertoire dans lequel vous vous trouvez,
  • \$ est substitué par # si vous êtes root, $ sinon,
  • \[\033 indique que l'on va écrire dans une autre couleur,
  • [01;32m\] signifie qu'on va écrire en vert clair. Vous pouvez consulter l'annexe en fin de tutoriel pour plus de détails sur les couleurs disponibles.
  • 32m\] signifie que vous allez écrire en vert. Chaque couleur est associé à une valeur (voir l'annexe en fin de tutoriel),
  • la séquence \[\033[00m\] signifie qu'on utilise à nouveau les couleurs par défaut.

On parle de séquence d'échappement bash. Les séquences d'échappement sont nombreuses, mais vous pouvez trouver un aperçu de ce qui existe ici :

http://www.woueb.net/2009/01/05/personnaliser-bash-mise-en-forme-couleurs-prompt/

 

Une fois le fichier corrigé, sauvez et quittez en appuyant sur ctrl x.

Quelques autres exemples

  • Pour root :



PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\](\u@\h)\[\033[01;36m\] (\w) \$ \[\033[00m\]'

 

  • Pour un utilisateur :



PS1='${debian_chroot:+($debian_chroot)}\[\033[01;33m\](\u@\h)\[\033[01;36m\] (\w) \$ \[\033[00m\]'


Le fichier n'existe pas, que dois-je faire ?

 

Recopiez simplement le code mentionné dans la section ci-dessous.

 



# set a fancy prompt (non-color, unless we know we "want" color)
 case "$TERM" in
     xterm|xterm-color) color_prompt=yes;;
 esac
if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;33m\](\u@\h)\[\033[01;36m\] (\w) \$ \[\033[00m\]'
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

 

Une fois le fichier corrigé, sauvez et quittez en appuyant sur ctrl x.

 

Comment tester ?

 

Chargez simplement votre ~/.bashrc avec la commandes :

 

source ~/.bashrc

 

Si le résultat ne vous convient pas et que vous souhaitez revenir à la situation initiale :

 

cp ~/.bashrc.bak ~/.bashrc

source ~/.bashrc

 

Annexe : séquences d'échappement liées aux couleurs

Palette foncée

\033[01;30m\] : Noir
\033[01;31m\] : Rouge
\033[01;32m\] : Vert
\033[01;33m\] : Jaune
\033[01;34m\] : Bleu
\033[01;35m\] : Violet
\033[01;36m\] : Cyan
\033[01;37m\] : Gris

 

Palette claire

 

\033[00;30m\] : Noir
\033[00;31m\] : Rouge
\033[00;32m\] : Vert
\033[00;33m\] : Jaune
\033[00;34m\] : Bleu
\033[00;35m\] : Violet
\033[00;36m\] : Cyan
\033[00;37m\] : Gris

.
X
 
 
 
 
 

You havecharacters left.