Aller au contenu
English
Compte : non connecté, synchronisation possible Mon apprentissage
Selectionner le thème
English

Personnaliser Bash : .bashrc, prompt, bash-it et fzf

Par mis à jour le

Améliorer cette page

Logo GNU Bash

Personnaliser Bash tient dans un fichier : ~/.bashrc. C'est là que vous posez vos alias, votre prompt PS1, vos fonctions et vos variables d'environnement, relus à chaque terminal. Bash est le shell par défaut de Debian, d'Ubuntu et de RHEL ; macOS, lui, est passé à Zsh en 2019. Cette page montre les réglages utiles à la main, puis deux outils qui vont plus loin : bash-it pour les thèmes et plugins, fzf pour chercher dans l'historique. Les comportements décrits ont été vérifiés sur Debian 13, Ubuntu 24.04 et AlmaLinux 10.

  • Configurer .bashrc pour personnaliser prompt, alias et fonctions
  • Personnaliser le prompt PS1 pour afficher les informations utiles
  • Installer et utiliser bash-it pour gérer thèmes et plugins
  • Intégrer fzf pour une recherche floue ultra-rapide dans l'historique et les fichiers

Bash, acronyme de « Bourne Again Shell », a été publié en 1989 par Brian Fox pour le projet GNU. Il succède au sh de Stephen Bourne, dont il reprend la syntaxe pour rester compatible avec les scripts existants, en y ajoutant l'historique, la complétion et de nombreuses extensions.

Son inclusion dans le projet GNU en a fait le shell naturel des distributions Linux, et il a longtemps été celui de macOS, jusqu'à ce qu'Apple le remplace par Zsh en 2019. Face à Zsh, Ksh ou Tcsh, Bash se distingue par un équilibre entre simplicité et fonctionnalités, et surtout par sa présence garantie sur les serveurs : c'est le shell que vos scripts d'administration peuvent supposer disponible.

Bash est préinstallé sur les trois distributions de référence : il n'y a rien à installer. Sa version se lit avec bash --version, utile pour savoir si une fonctionnalité récente est disponible. Mesuré : 5.2.37 sur Debian 13, 5.2.21 sur Ubuntu 24.04, 5.2.26 sur AlmaLinux 10.

Fenêtre de terminal
bash --version

Comment définir Bash comme shell par défaut sur Linux

Section intitulée « Comment définir Bash comme shell par défaut sur Linux »

Votre shell de connexion est enregistré dans /etc/passwd, et chsh -s le modifie pour votre compte. La commande vous demande votre mot de passe, et n'accepte pour un utilisateur ordinaire que les shells listés dans /etc/shells.

Fenêtre de terminal
chsh -s "$(command -v bash)"

chsh est fourni par le paquet passwd sur Debian et Ubuntu, par util-linux sur AlmaLinux 10. Le changement vaut pour les prochaines connexions : vérifiez-le avec getent passwd "$USER", dont la ligne doit se terminer par le chemin de Bash.

Personnaliser Bash : astuces pour le fichier .bashrc

Section intitulée « Personnaliser Bash : astuces pour le fichier .bashrc »

Le fichier ~/.bashrc est lu par chaque shell interactif qui n'est pas un shell de connexion, c'est-à-dire par chaque terminal que vous ouvrez dans une session graphique. Les shells de connexion (SSH, console) lisent d'abord un autre fichier, mais les distributions leur font charger .bashrc à leur tour : ~/.profile le fait sur Debian et Ubuntu, ~/.bash_profile sur RHEL et ses dérivées (vérifié dans /etc/skel).

Situé dans votre répertoire personnel, .bashrc ne concerne que votre compte. On y définit des variables d'environnement, des alias, des fonctions et le prompt ; chacun fait l'objet d'une section ci-dessous.

Les alias sont des raccourcis pour les commandes que vous tapez souvent. Ils se déclarent dans .bashrc, un par ligne, avec des guillemets simples autour de la commande :

Fenêtre de terminal
# Alias pour afficher les fichiers cachés en mode détaillé
alias ll='ls -la'
# Alias pour naviguer rapidement
alias ..='cd ..'
alias ...='cd ../..'
# Alias pour des commandes complexes (Debian et Ubuntu)
alias update='sudo apt update && sudo apt upgrade -y'

Un alias ajouté au fichier n'existe pas encore dans le terminal ouvert : rechargez .bashrc pour l'appliquer, ou ouvrez un nouveau terminal. Le fonctionnement d'apt utilisé ici est détaillé dans le guide apt.

Fenêtre de terminal
source ~/.bashrc

Le prompt est la ligne affichée avant chaque commande. Il se règle avec la variable PS1, dont chaque séquence à antislash est remplacée à l'affichage :

Fenêtre de terminal
# Prompt affichant l'utilisateur, l'hôte et le répertoire courant
export PS1='\u@\h:\w\$ '

Dans cet exemple, trois séquences suffisent à situer la session :

  • \u représente le nom d'utilisateur.
  • \h représente le nom de l'hôte.
  • \w représente le répertoire de travail courant.

Pour ajouter des couleurs, on insère des codes ANSI, encadrés de \[ et \] : ces marqueurs indiquent à Bash que les caractères ne prennent pas de place à l'écran, sans quoi les longues commandes se replient mal.

Fenêtre de terminal
export PS1='\[\e[32m\]\u@\h:\[\e[34m\]\w\[\e[0m\]\$ '

Ce prompt colore l'utilisateur et l'hôte en vert (32), le répertoire en bleu (34), puis revient à la couleur par défaut avec \e[0m.

Les fonctions regroupent plusieurs commandes sous un nom, et acceptent des arguments là où un alias ne le peut pas. Par exemple, une fonction qui vide un répertoire temporaire :

Fenêtre de terminal
clean_temp() {
rm -rf ~/temp/*
echo "Dossier temporaire nettoyé."
}

Ajoutez-la à votre .bashrc, puis rechargez-le avec source ~/.bashrc pour l'utiliser. Les fonctions sont détaillées dans Fonctions Bash, avec leurs pièges de portée.

.bashrc sert aussi à définir des variables d'environnement, transmises aux programmes que vous lancez. Le cas le plus courant est l'ajout d'un répertoire au PATH :

Fenêtre de terminal
# Ajouter des répertoires au PATH
export PATH=$PATH:/usr/local/bin:/opt/scripts

Attention à un effet de bord : chaque source ~/.bashrc rajoute ces répertoires au PATH, qui s'allonge avec des doublons au fil des rechargements. C'est sans conséquence grave, mais ouvrir un nouveau terminal repart d'un PATH propre.

bash-it : framework pour personnaliser Bash facilement

Section intitulée « bash-it : framework pour personnaliser Bash facilement »

bash-it est un framework open source qui regroupe, pour Bash, des alias, des plugins, des thèmes de prompt et des complétions prêts à l'emploi. Il évite de tout configurer à la main, au prix d'un dépôt GitHub cloné dans votre répertoire personnel.

Il se compose de quatre familles de modules, activables une à une avec bash-it enable :

  • Alias : raccourcis prédéfinis pour simplifier les commandes courantes.
  • Plugins : modules qui ajoutent des fonctionnalités spécifiques (ex. : support Git, Docker).
  • Thèmes : personnalisation du prompt pour rendre le terminal plus informatif et esthétique.
  • Complétions : améliorations de l'autocomplétion pour des commandes complexes.

L'installation se fait en quatre étapes, sans droits root : cloner le dépôt, lancer son script d'installation, l'activer dans .bashrc, puis recharger.

  1. Cloner le dépôt dans ~/.bash_it :

    Fenêtre de terminal
    git clone --depth=1 https://github.com/Bash-it/bash-it.git ~/.bash_it
  2. Lancer le script d'installation, qui propose de sauvegarder votre .bashrc existant avant de le modifier :

    Fenêtre de terminal
    ~/.bash_it/install.sh
  3. Activer bash-it à la main si vous avez refusé la modification automatique du .bashrc, en y ajoutant cette ligne :

    Fenêtre de terminal
    source ~/.bash_it/bash_it.sh
  4. Recharger la configuration :

    Fenêtre de terminal
    source ~/.bashrc

bash-it livre de nombreux modules, désactivés par défaut pour la plupart. La commande bash-it show liste un catalogue avec l'état de chaque entrée, et bash-it enable active celle qui vous intéresse.

Les jeux d'alias activés sont rangés dans ~/.bash_it/aliases/enabled. bash-it show alias affiche le catalogue, avec [ ] pour un jeu inactif et [x] pour un jeu actif :

Fenêtre de terminal
bash-it show alias
Alias Enabled? Description
ag [ ] the silver searcher (ag) aliases
ansible [ ] ansible abbreviations
apt [ ] Apt and dpkg aliases for Ubuntu and Debian distros.
atom [ ] Atom.io editor abbreviations
bash-it [ ] Aliases for the bash-it command (these aliases are automatically included with the "general" aliases)
bolt [ ] puppet bolt aliases
bundler [ ] ruby bundler
bash-it enable alias ansible

La dernière commande active le jeu d'alias ansible, qui abrège les commandes Ansible courantes. Le même principe vaut pour tous les jeux listés.

Les plugins ajoutent des fonctions et des comportements au terminal. bash-it show plugins en liste le catalogue ; le plugin base, marqué [x], est actif par défaut :

Fenêtre de terminal
bash-it show plugins
Plugin Enabled? Description
alias-completion [ ]
autojump [ ] Autojump configuration, see https://github.com/wting/autojump for more details
aws [ ] AWS helper functions
base [x] miscellaneous tools
...
bash-it enable plugin docker

Cette commande active le plugin Docker, qui fournit des fonctions d'aide et des complétions pour gérer vos conteneurs.

Les complétions permettent à Bash de proposer les options et les arguments d'une commande quand vous appuyez sur Tab. Pour activer celle de SSH :

Fenêtre de terminal
bash-it enable completion ssh

La touche Tab complète alors les noms d'hôtes connus après ssh, ce qui facilite la saisie de vos connexions.

Un thème bash-it remplace votre PS1 par un prompt plus riche : utilisateur, machine, répertoire courant, état Git, parfois l'heure ou le code de retour. Les thèmes disponibles sont les sous-dossiers de ~/.bash_it/themes, chacun contenant le fichier .bash qui le définit.

Fenêtre de terminal
ls ~/.bash_it/themes
90210 codeword font modern powerline-naked sexy
agnoster cooperkid gallifrey modern-t powerline-plain simple
atomic cupcake githelpers.theme.bash modern-time powerturk sirup
axin demula gitline morris primer slick
bakke dos hawaii50 n0qorg pro standard
barbuk doubletime inretio newin pure tonka
base.theme.bash doubletime_multiline iterate norbu purity tonotdo
binaryanomaly doubletime_multiline_pyonly kitsune nwinkler radek tylenol
bira dulcie lambda nwinkler_random_colors rainbowbrite wanelo
bobby duru liquidprompt oh-my-posh ramses zitron
bobby-python easy luan p4helpers.theme.bash rana zork
brainy elixr mairan parrot redline
brunton emperor mbriggs pete rjorgenson
candy envy metal powerline robbyrussell
clean essential minimal powerline-multiline roderik

Parmi les plus utilisés figurent powerline, bobby et pure. Le thème se choisit avec la variable BASH_IT_THEME du .bashrc, par exemple pour powerline :

Fenêtre de terminal
export BASH_IT_THEME='powerline'

Rechargez ensuite votre configuration pour que le nouveau thème remplace le prompt courant :

Fenêtre de terminal
source ~/.bashrc

Chaque thème est un fichier .bash éditable dans ~/.bash_it/themes. Pour y ajouter une information, on écrit une fonction et on l'injecte dans le prompt. Exemple avec l'état de la batterie, lu par acpi quand il est installé :

Fenêtre de terminal
# Ajouter un segment d'état de la batterie
battery_status() {
if command -v acpi &> /dev/null; then
acpi -b | grep -o '[0-9]*%' | head -n 1
fi
}
export PS1='$(battery_status) '$PS1

Le test command -v acpi évite une erreur sur les machines sans batterie ou sans l'outil. Gardez vos modifications dans une copie du thème : une mise à jour de bash-it par git pull écraserait le fichier d'origine.

fzf est un filtre interactif en ligne de commande : il affiche une liste et la réduit au fil de la frappe, sans exiger le nom exact. Intégré à Bash, il remplace la recherche Ctrl+R dans l'historique par une liste filtrable, et ajoute Ctrl+T pour insérer un chemin de fichier.

fzf est empaqueté sur toutes les distributions de référence, mais pas dans les mêmes dépôts ni dans la même version, et la version décide de la façon de l'activer. Mesuré : 0.60 sur Debian 13, 0.44 sur Ubuntu 24.04, et 0.58 depuis EPEL sur AlmaLinux 10, où dnf install fzf échoue sans ce dépôt.

  • Debian/Ubuntu :

    Fenêtre de terminal
    sudo apt install fzf
  • RHEL et dérivées (le paquet vient d'EPEL) :

    Fenêtre de terminal
    sudo dnf install epel-release
    sudo dnf install fzf
  • macOS avec Homebrew :

    Fenêtre de terminal
    brew install fzf

Si vous utilisez bash-it, un plugin dédié charge fzf pour vous. Il suppose que fzf est déjà installé par le gestionnaire de paquets :

Fenêtre de terminal
bash-it enable plugin fzf

Rechargez ensuite .bashrc : les raccourcis de fzf sont actifs sans toucher au fichier vous-même.

Sans bash-it, l'activation tient en quelques lignes du .bashrc, qui dépendent de la version installée. Depuis fzf 0.48, la commande fzf --bash produit elle-même le code des raccourcis et de la complétion : c'est le cas de Debian 13 et d'AlmaLinux 10. Ubuntu 24.04, avec sa version 0.44, ne la connaît pas : il faut y charger les fichiers fournis par le paquet.

Fenêtre de terminal
# fzf 0.48 et plus (Debian 13, AlmaLinux 10 avec EPEL)
eval "$(fzf --bash)"
# fzf plus ancien (Ubuntu 24.04) : fichiers livrés par le paquet
source /usr/share/doc/fzf/examples/key-bindings.bash
source /usr/share/bash-completion/completions/fzf
# Apparence : 40 % de hauteur, liste de haut en bas, cadre
export FZF_DEFAULT_OPTS="--height 40% --reverse --border"

Ne gardez que le bloc qui correspond à votre système : fzf --version vous le dit. La variable FZF_DEFAULT_OPTS, elle, vaut pour toutes les versions.

Après avoir modifié votre fichier .bashrc, rechargez-le, puis testez Ctrl+R : une liste filtrable de votre historique doit s'ouvrir au lieu de la recherche classique.

Fenêtre de terminal
source ~/.bashrc

Écrire des scripts Bash : automatisation et bonnes pratiques

Section intitulée « Écrire des scripts Bash : automatisation et bonnes pratiques »

Un script Bash est un fichier qui enchaîne des commandes, pour automatiser une tâche répétitive. Le module « Écrire des scripts Bash » de ce parcours le traite en détail ; cette section n'en rappelle que les bases, pour situer ce que votre .bashrc a en commun avec un script.

Un script commence par la ligne shebang, qui indique au système quel interpréteur doit l'exécuter :

#!/usr/bin/env bash
echo "Bonjour, ceci est un script Bash simple"

Les arguments passés au script arrivent dans $1, $2, et ainsi de suite, ce qui rend le script réutilisable avec des valeurs différentes :

#!/usr/bin/env bash
nom_utilisateur=$1
echo "Bienvenue, $nom_utilisateur!"

Les structures de contrôle if, for et while orientent l'exécution selon l'état du système, par exemple l'existence d'un fichier :

#!/bin/bash
if [ -f "/etc/passwd" ]; then
echo "Le fichier /etc/passwd existe."
else
echo "Le fichier /etc/passwd n'existe pas."
fi

Pour l'exécuter directement, un script doit être rendu exécutable, puis lancé avec son chemin :

Fenêtre de terminal
chmod +x mon_script.sh
./mon_script.sh

Deux leçons du module scripts prolongent ces bases. Elles sont placées avant celle-ci dans le parcours, et vous pouvez y revenir à tout moment :

Aller plus loin avec Bash : outils et personnalisation avancée

Section intitulée « Aller plus loin avec Bash : outils et personnalisation avancée »

Deux outils reviennent régulièrement en complément du .bashrc quand la personnalisation atteint ses limites. asdf est un gestionnaire de versions qui installe côte à côte plusieurs versions d'un même langage ou d'un même outil, et bascule de l'une à l'autre selon le projet. direnv charge et décharge automatiquement des variables d'environnement en fonction du répertoire courant, ce qui évite l'export oublié quand on change de projet.

Combinés à bash-it, ces outils produisent un environnement de travail très proche, en confort, de ce qu'offre nativement Zsh, sans changer de shell ni réapprendre une syntaxe.

Presque tous les problèmes de personnalisation viennent d'un fichier non rechargé ou d'une ligne qui ne correspond pas à votre version d'outil. Le réflexe : ouvrir un nouveau terminal, qui relit tout depuis zéro.

SymptômeCause probableSolution
Les modifications du .bashrc ne s'appliquent pasLe fichier n'a pas été rechargé après modificationLancer source ~/.bashrc ou ouvrir un nouveau terminal
Le prompt affiche des caractères bizarres, les longues lignes se replient malCodes couleur de PS1 non encadrésEncadrer chaque code couleur avec \[ et \]
bash-it ne charge pas les pluginsLes plugins ne sont pas activésLancer bash-it enable plugin <nom> puis source ~/.bashrc
unknown option: --bash au démarrage du terminalfzf antérieur à 0.48 (Ubuntu 24.04)Charger /usr/share/doc/fzf/examples/key-bindings.bash à la place
Ctrl+R reste la recherche classiqueRaccourcis fzf non chargésAjouter eval "$(fzf --bash)" ou le fichier key-bindings.bash au .bashrc
dnf install fzf ne trouve pas le paquetfzf vient d'EPEL sur RHEL et ses dérivéessudo dnf install epel-release, puis relancer
  • Le fichier ~/.bashrc est le point central de personnalisation de Bash, relu par chaque terminal interactif, y compris les sessions de connexion via ~/.profile ou ~/.bash_profile.
  • Les alias et fonctions dans .bashrc automatisent les commandes répétitives.
  • Le prompt PS1 peut afficher utilisateur, hôte et répertoire ; ses codes couleur s'encadrent de \[ et \].
  • bash-it fournit un framework complet de thèmes et plugins prêt à l'emploi.
  • fzf améliore considérablement la recherche dans l'historique ; sa version décide de la façon de l'activer.

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

Ce projet vous est utile ?

Les guides, formations, quiz et labs restent gratuits. Si vous les utilisez régulièrement, vous pouvez contribuer à leur maintenance et à leur développement.

Devenir membre de soutien (nouvel onglet) Soutenir une fois (nouvel onglet) En savoir plus

Suivez aussi le projet sur LinkedIn