Niveau :      
Résumé : PS1="[\t] \[\e[01;32m\]\u@\h\[\e[00m\]:\[\e[01;34m\]\w\[\e[00m\]\$ "

Si vous utilisez bash, la variable $PS1 décrit le prompt principal, celui qui s'affiche à chaque ligne de commande. Il est souvent initialisé à quelque chose comme login@host:path$ mais vous pouvez y mettre ce que vous voulez.

Faisons un test :

$ PS1=youpi

Mais revenons à quelque chose de plus standard :

$ PS1="\u@\h:\w\$ "

Vous aurez compris que les '\\' représentent des valeurs interprétées par le shell. Utilisons-en quelques unes sympathiques.

Si vous voulez être avertis par un bip à chaque nouvelle ligne (cela vous indique que la commande précédente vient de se terminer), précédez le de \a.

$ PS1="\a\u@\h:\w\$ "

Si vous pensez que votre shell n'est pas assez aéré, ajoutez un retour à la ligne :

$ PS1="\u@\h:\w\$\n"

Vous pouvez aussi intégrer l'heure à votre prompt, cela peut être utile pour estimer la durée de vos commandes :

$ PS1="[\t] \u@\h:\w\$ "

Si vous utilisez souvent l'historique de bash avec les numéros de ligne vous pourriez afficher ces numéros de ligne :

$ PS1="\! \u@\h:\w\$ "

Ainsi, utilisez !1234 pour répéter la commande de la ligne 1234.

Si vous voulez juste les numéros de commande sans utiliser l'historique, utilisez plutôt # que !

Et finissons par le plus beau, les couleurs. Le caractère e est le caractère d'échappement qui précède un code ANSI. Les codes ANSI permettent de formater un texte dans un terminal. Exemple pour afficher le nom de machine en vert :

$ PS1="\u@\h:\e[01;32m\w\e[00m\$ "

Pour une documentation plus complète sur les codes ANSI lisez cette page.

Mais attention, un tel prompt vous poserait quelques problèmes d'affichage car bash calcule la taille des lignes pour les afficher proprement, et il ne connait pas la taille des codes ANSI (0). Vous devez donc entourer tous vos codes non affichables de \[ et \] ce qui donne :

$ PS1="\u@\h:\[\e[01;32m\]\w\[\e[00m\]\$ "

Et enfin vous pouvez utiliser toutes les substitutions et variables que supporte bash pour formater votre prompt.

Il n'existe pas que PS1, mais aussi PS2, PS3 et PS4 qui ont un peu moins d'intérêt à être personnalisés.

  • PS2 sert lorsque votre ligne n'est pas terminée, par exemple lorsqu'elle contient une chaine de caractère non terminée
  • PS3 sert de prompt pour la commande select d'usage assez rare
  • PS4 sert de base pour l'affichage des traces de debug de script (commande set -x)

Et enfin pour pérenniser votre personnalisation, n'oubliez pas d'écrire votre ligne dans le fichier ~/.bashrc

PS : pour le détail des caractères interprétés, man 1 bash puis /^PROMPTING