Quand on travaille avec plusieurs serveurs, plusieurs fenêtres de terminal et parfois plusieurs utilisateurs SSH, il devient vite important de savoir où l’on tape. Un mauvais terminal, une mauvaise machine, une commande trop confiante… et la journée prend une saveur légèrement carbonisée.
Le prompt Bash permet justement d’afficher des informations utiles avant chaque commande : utilisateur, nom du serveur, dossier courant, heure, statut de la dernière commande ou encore branche Git. On peut aussi le colorer pour identifier plus vite un environnement local, staging ou production.
Voici comment personnaliser proprement le prompt du terminal sous Bash, sans casser les retours à la ligne ni transformer votre console en sapin de Noël nucléaire.
Qu’est-ce que le prompt Bash ?
Le prompt est l’invite affichée par le shell avant chaque commande. Dans Bash, le prompt principal est défini par la variable PS1.
Un prompt très simple peut ressembler à ceci :
matt@apollo:~$
Ce prompt indique l’utilisateur, le serveur, le dossier courant et le type d’utilisateur. Le signe $ correspond généralement à un utilisateur normal. Le signe # indique souvent une session root. C’est le moment où l’on respire avant d’appuyer sur Entrée.
Modifier le prompt dans .bashrc
Pour personnaliser votre prompt de manière permanente, éditez le fichier ~/.bashrc de l’utilisateur concerné.
nano ~/.bashrc
Ajoutez ensuite votre configuration en fin de fichier. Pour appliquer immédiatement les changements, rechargez le fichier :
source ~/.bashrc
Si vous êtes connecté en SSH, vous pouvez aussi ouvrir un nouveau terminal pour vérifier le rendu sans risquer de casser votre session active.
Les variables utiles dans PS1
Bash propose plusieurs séquences spéciales pour construire un prompt lisible.
| Séquence | Affichage | Exemple |
|---|---|---|
\u | Nom de l’utilisateur | matt |
\h | Nom d’hôte court | apollo |
\H | Nom d’hôte complet | apollo.skyminds.net |
\w | Chemin courant complet | ~/public_html |
\W | Nom du dossier courant | public_html |
\t | Heure au format 24 h | 14:32:10 |
\d | Date | Tue May 19 |
\n | Nouvelle ligne | |
\$ | $ ou # selon l’utilisateur | $ |
\[ et \] | Délimitent les séquences non imprimables | Couleurs |
Les deux séquences les plus sous-estimées sont \[ et \]. Elles indiquent à Bash que ce qui se trouve entre les deux ne prend pas de place visible à l’écran. C’est essentiel pour les couleurs.
Pourquoi les couleurs peuvent casser votre terminal
Les couleurs du terminal sont produites par des séquences d’échappement. Elles ne s’affichent pas comme du texte, mais Bash doit savoir qu’elles existent. Si vous ne les entourez pas avec \[ et \], Bash calcule mal la longueur du prompt.
Symptômes classiques :
Marre des agences qui sous-traitent ?
Avec moi, vous parlez directement au développeur qui fait le travail. Pas d'intermédiaire, pas de promesses creuses. Juste du code propre et un interlocuteur joignable.
Travaillons directement ensemble →- la ligne se replie au mauvais endroit ;
- le curseur se décale ;
- l’historique s’affiche bizarrement ;
- les commandes longues écrasent le prompt ;
- le copier-coller devient pénible.
Donc, dès que vous ajoutez une couleur, encadrez-la correctement. Le terminal vous remerciera en silence. C’est son langage affectif.
Définir des couleurs propres avec tput
On peut écrire les couleurs ANSI à la main, mais tput reste plus portable. Il interroge la base terminfo pour générer les séquences adaptées au terminal.
Ajoutez ce bloc dans ~/.bashrc :
# Couleurs utilisables dans le prompt Bash.
if command -v tput >/dev/null 2>&1 && [ -n "$TERM" ]; then
BOLD="\[$(tput bold)\]"
RESET="\[$(tput sgr0)\]"
BLACK="\[$(tput setaf 0)\]"
RED="\[$(tput setaf 1)\]"
GREEN="\[$(tput setaf 2)\]"
YELLOW="\[$(tput setaf 3)\]"
BLUE="\[$(tput setaf 4)\]"
MAGENTA="\[$(tput setaf 5)\]"
CYAN="\[$(tput setaf 6)\]"
WHITE="\[$(tput setaf 7)\]"
else
BOLD=""
RESET=""
BLACK=""
RED=""
GREEN=""
YELLOW=""
BLUE=""
MAGENTA=""
CYAN=""
WHITE=""
fiLangage du code : PHP (php)
Le test évite de déclencher des erreurs dans un terminal minimal ou dans une session où TERM n’est pas correctement défini.
Prompt simple et lisible
Voici un prompt sobre, parfait pour un serveur :
PS1="${BOLD}${GREEN}\u@\h${RESET}:${BLUE}\w${RESET}\\$ "Langage du code : JavaScript (javascript)
Il affiche :
- l’utilisateur en vert ;
- le nom du serveur ;
- le chemin courant en bleu ;
$ou#selon le niveau de privilège.
Le rendu ressemble à ceci :
matt@apollo:~/public_html$
Prompt sur deux lignes
Sur un serveur, les chemins peuvent devenir longs. Un prompt sur deux lignes garde une zone de saisie plus confortable.
PS1="${BOLD}${CYAN}\u@\h${RESET} ${YELLOW}\w${RESET}\n\\$ "Langage du code : JavaScript (javascript)
Exemple :
matt@apollo /home/www/skyminds/public_html/wp-content/themes
$Langage du code : CSS (css)
C’est moins compact, mais beaucoup plus agréable quand on travaille dans des arborescences profondes.
Prompt avec statut de la dernière commande
Un prompt peut aussi afficher si la dernière commande a réussi ou échoué. C’est très pratique en administration système.
Ajoutez cette fonction dans ~/.bashrc :
prompt_status() {
local exit_code=$?
if [ "$exit_code" -eq 0 ]; then
printf "%s" "${GREEN}✓${RESET}"
else
printf "%s" "${RED}✗ ${exit_code}${RESET}"
fi
}Langage du code : JavaScript (javascript)
Puis utilisez-la dans PS1 :
PS1='$(prompt_status) '"${BOLD}${CYAN}"'\u@\h'"${RESET}"':'"${BLUE}"'\w'"${RESET}"'\$ 'Langage du code : JavaScript (javascript)
La partie $(prompt_status) est évaluée à chaque affichage du prompt. C’est important : si elle était évaluée une seule fois au chargement du fichier, elle ne servirait à rien. Un prompt dynamique doit rester dynamique. Scandaleux, mais logique.
Prompt avec branche Git
Si vous travaillez souvent dans des dépôts Git, afficher la branche courante peut éviter des commits sur la mauvaise branche. Ce qui est bon pour la tension artérielle.
Ajoutez cette fonction :
prompt_git_branch() {
local branch
branch=$(git symbolic-ref --quiet --short HEAD 2>/dev/null) || return 0
printf " %s" "${MAGENTA}(${branch})${RESET}"
}Langage du code : JavaScript (javascript)
Puis combinez-la avec votre prompt :
PS1="${BOLD}${GREEN}\u@\h${RESET}:${BLUE}\w${RESET}"'$(prompt_git_branch)'"\\$ "Langage du code : JavaScript (javascript)
Exemple de rendu :
matt@apollo:~/public_html/wp-content/themes/skyminds (main)$Langage du code : JavaScript (javascript)
Cette fonction reste volontairement simple. Elle n’affiche que la branche. Pour un prompt Git plus riche, avec état dirty, ahead/behind et stash, mieux vaut utiliser un outil spécialisé ou une fonction plus complète. Mais pour un serveur, simple est souvent mieux.
Prompt spécial production
Sur un serveur de production, il peut être utile d’avoir un prompt plus visible. Le but n’est pas de faire joli. Le but est d’éviter de confondre production et staging.
PS1="${BOLD}${RED}[PROD]${RESET} ${YELLOW}\u@\h${RESET}:${BLUE}\w${RESET}\\$ "Langage du code : JavaScript (javascript)
Exemple :
[PROD] matt@apollo:/var/www/site$Langage du code : JavaScript (javascript)
Pour un serveur de staging :
PS1="${BOLD}${YELLOW}[STAGING]${RESET} ${GREEN}\u@\h${RESET}:${BLUE}\w${RESET}\\$ "Langage du code : JavaScript (javascript)
L’idée est simple : rendre l’environnement évident avant la commande, pas après le désastre.
Prompt différent pour root
On peut aussi afficher un prompt plus agressif pour l’utilisateur root. Ajoutez cette logique dans ~/.bashrc :
if [ "$(id -u)" -eq 0 ]; then
PS1="${BOLD}${RED}\u@\h${RESET}:${YELLOW}\w${RESET}# "
else
PS1="${BOLD}${GREEN}\u@\h${RESET}:${BLUE}\w${RESET}\\$ "
fiLangage du code : JavaScript (javascript)
Avec ça, une session root devient immédiatement visible. Ce n’est pas une protection de sécurité, mais c’est un garde-fou ergonomique.
Styles prêts à copier
Voici trois styles inspirés de l’article original, mais réécrits proprement.
Style Lemon Lime
PS1="${BOLD}${CYAN}\t ${GREEN}[${YELLOW}\u${RED}@${YELLOW}\H ${CYAN}\w${GREEN}]${BLUE}\\$ ${RESET}"Langage du code : JavaScript (javascript)
Coloré, lisible, légèrement cocktail d’été. À utiliser sur une machine personnelle ou un serveur non critique si vous aimez les prompts vivants.
Style Matrix
PS1="${BOLD}${GREEN}[\u@\h \W]\\$ ${RESET}"Langage du code : JavaScript (javascript)
Tout en vert. Sobre, rétro, efficace. Il ne manque plus que la pluie de caractères et un trench-coat inutile.
Style Rainbow
PS1="${BOLD}${RED}[${YELLOW}\u${GREEN}@${BLUE}\h ${MAGENTA}\W${RED}]${WHITE}\\$ ${RESET}"Langage du code : JavaScript (javascript)
Le style Rainbow est amusant, mais je ne le recommande pas pour une machine de production. Le prompt doit aider à penser, pas distraire votre cortex visuel.
Exemple complet de .bashrc
Voici un bloc complet, propre et réutilisable. Il définit les couleurs, affiche l’utilisateur, l’hôte, le chemin courant, la branche Git et un statut de commande.
# Prompt Bash personnalisé.
# À placer dans ~/.bashrc.
if command -v tput >/dev/null 2>&1 && [ -n "$TERM" ]; then
BOLD="\[$(tput bold)\]"
RESET="\[$(tput sgr0)\]"
RED="\[$(tput setaf 1)\]"
GREEN="\[$(tput setaf 2)\]"
YELLOW="\[$(tput setaf 3)\]"
BLUE="\[$(tput setaf 4)\]"
MAGENTA="\[$(tput setaf 5)\]"
CYAN="\[$(tput setaf 6)\]"
else
BOLD=""
RESET=""
RED=""
GREEN=""
YELLOW=""
BLUE=""
MAGENTA=""
CYAN=""
fi
prompt_status() {
local exit_code=$?
if [ "$exit_code" -eq 0 ]; then
printf "%s" "${GREEN}✓${RESET}"
else
printf "%s" "${RED}✗ ${exit_code}${RESET}"
fi
}
prompt_git_branch() {
local branch
branch=$(git symbolic-ref --quiet --short HEAD 2>/dev/null) || return 0
printf " %s" "${MAGENTA}(${branch})${RESET}"
}
if [ "$(id -u)" -eq 0 ]; then
PS1='$(prompt_status) '"${BOLD}${RED}"'\u@\h'"${RESET}"':'"${YELLOW}"'\w'"${RESET}"'$(prompt_git_branch) # '
else
PS1='$(prompt_status) '"${BOLD}${GREEN}"'\u@\h'"${RESET}"':'"${BLUE}"'\w'"${RESET}"'$(prompt_git_branch) \$ '
fiLangage du code : PHP (php)
Rechargez ensuite votre configuration :
source ~/.bashrc
Si Git n’est pas installé, la fonction de branche ne s’affichera simplement pas correctement. Sur un serveur minimal, vous pouvez supprimer toute la fonction prompt_git_branch() si vous n’en avez pas besoin.
Corriger un prompt cassé
Si votre terminal devient illisible après une modification de PS1, commencez par réinitialiser temporairement le prompt :
PS1='\u@\h:\w\$ 'Langage du code : JavaScript (javascript)
Si les couleurs restent bloquées, réinitialisez l’affichage du terminal :
tput sgr0
Ou, si le terminal est vraiment parti cueillir des champignons :
reset
Ensuite, corrigez ~/.bashrc, puis rechargez-le :
nano ~/.bashrc
source ~/.bashrc
Différence entre Bash et Zsh
Ce guide concerne Bash. Si vous utilisez Zsh, notamment sur macOS récent, la configuration du prompt se fait plutôt dans ~/.zshrc, avec une syntaxe différente.
Pour vérifier votre shell courant :
echo "$SHELL"Langage du code : PHP (php)
Pour vérifier le shell réellement utilisé dans la session :
ps -p $$ -o comm=
Si la commande retourne bash, vous êtes au bon endroit. Si elle retourne zsh, ce guide reste utile pour comprendre les principes, mais pas pour copier-coller tous les exemples.
Bonnes pratiques pour un prompt de serveur
- Gardez le prompt court sur les serveurs de production.
- Affichez toujours l’utilisateur et l’hôte.
- Utilisez une couleur différente pour root.
- Évitez les fonctions trop lentes dans
PS1. - Affichez la branche Git seulement si cela vous sert vraiment.
- Encadrez les séquences de couleur avec
\[et\]. - Préférez
tputaux codes ANSI codés en dur si vous voulez rester portable. - Évitez les emojis sur les serveurs anciens ou les terminaux minimalistes.
Un bon prompt ne doit pas impressionner. Il doit vous informer vite, sans bruit. C’est un tableau de bord, pas une boule à facettes.
À retenir
- Le prompt Bash principal se configure avec la variable
PS1. - Le fichier utilisateur à modifier est généralement
~/.bashrc. - Les séquences comme
\u,\h,\wet\$permettent d’afficher utilisateur, serveur, chemin et symbole de privilège. - Les couleurs doivent être encadrées avec
\[et\]. tputpermet de générer des couleurs compatibles avec le terminal.- Un prompt différent pour production, staging et root peut éviter de grosses erreurs.
- Un prompt trop chargé devient vite contre-productif.
Personnaliser le prompt Bash n’est pas seulement une coquetterie. C’est une petite amélioration ergonomique qui peut éviter de grosses erreurs, surtout quand vous administrez plusieurs serveurs. Une couleur bien placée vaut parfois mieux qu’un long moment de solitude après une commande lancée au mauvais endroit.
Sources
- GNU Bash Manual — Controlling the Prompt
- Linux man-pages — tput(1)
- Linux man-pages — terminfo(5)
- ArchWiki — Bash/Prompt customization
Un projet WordPress en tête ?
Vous avez une idée claire de ce que vous voulez, mais pas les ressources en interne pour le faire bien. Je développe des sites et extensions WordPress sur-mesure — sans délais à rallonge ni mauvaises surprises.
Décrivez-moi votre projet →

