Bash : personnaliser le prompt du terminal

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équenceAffichageExemple
\uNom de l’utilisateurmatt
\hNom d’hôte courtapollo
\HNom d’hôte completapollo.skyminds.net
\wChemin courant complet~/public_html
\WNom du dossier courantpublic_html
\tHeure au format 24 h14:32:10
\dDateTue May 19
\nNouvelle ligne
\$$ ou # selon l’utilisateur$
\[ et \]Délimitent les séquences non imprimablesCouleurs

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 :

  • 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.

Kinsta: Premium Managed WordPress hosting

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$
Kinsta: Premium Managed WordPress hosting

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.

Bash : personnaliser les couleurs de l'invite de commande (prompt) du terminal photo

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 tput aux 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, \w et \$ permettent d’afficher utilisateur, serveur, chemin et symbole de privilège.
  • Les couleurs doivent être encadrées avec \[ et \].
  • tput permet 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

Demandez à l'IA son opinion
Gravatar for Matt Biscay

Je suis Matt Biscay, développeur WordPress & WooCommerce certifié chez Codeable, administrateur système et enseignant.

J’aide les entreprises à créer, optimiser et fiabiliser leurs sites WordPress avec une approche technique propre : performance, sécurité, maintenance, développement sur mesure et résolution de problèmes complexes.

Sur Skyminds, je partage des tutoriels WordPress, WooCommerce, Linux et administration système, avec des solutions testées sur des cas réels et pensées pour durer.

Découvrez mes services WordPress et WooCommerce.

Laisser un commentaire