Permettez-moi d'être direct : si vous utilisez encore bash comme shell interactif en 2026, vous avez soit une très bonne raison soit aucune raison du tout. Dans 95% des cas c'est la deuxième option.
Bash a été écrit en 1989 par Brian Fox pour remplacer le Bourne shell. Il a 37 ans. C'est plus vieux que certains de vos collègues seniors. Il fait le travail, personne ne dit le contraire, mais "il fait le travail" c'est aussi ce qu'on dit d'une Renault 4 pour aller au supermarché. Vous pouvez. La question c'est pourquoi vous le feriez encore.
Zsh existe depuis 1990. Il est installé par défaut sur macOS depuis Catalina (2019) parce qu'Apple en avait assez de distribuer un shell sous licence GPL v3. La raison est contractuelle, le résultat est excellent.
Ce guide est opinionné. Assumez-le.
Bash vs Zsh - l'encart que vous attendiez
Soyons honnêtes sur ce que bash fait bien et ce que zsh fait mieux.
Ce que bash fait bien
- Il est présent sur absolument tous les systèmes Unix, y compris ceux qui ont été installés en 2003 et n'ont pas été touchés depuis
- Les scripts bash sont portables - un script bash tourne partout
- La compatibilité POSIX est irréprochable
- Si vous devez vous connecter à un serveur en urgence à 3h du matin avec un utilisateur système basique, bash sera là
- Oh My Bash existe - c'est un fork assumé d'Oh My Zsh pour bash, avec des plugins git, docker, SSH, des themes, et une structure modulaire. Ce n'est pas rien.
Ce que zsh fait mieux - et la liste est longue
| Fonctionnalité | bash | zsh |
|---|---|---|
| Autocomplétion | bash-completion requis, basique | Native, contextuelle, extensible |
| Correction orthographique | Non | setopt CORRECT |
| Globbing qualifié | Non - nécessite find | *(om[1,5]), *(Lk+100), ^pattern |
| Historique partagé | Non natif | setopt SHARE_HISTORY |
| Déduplication historique | Non | setopt HIST_IGNORE_DUPS |
| Plugins | Oh My Bash - existe, écosystème limité | Oh My Zsh - 300+ plugins, écosystème massif |
| Themes | Oh My Bash - quelques themes | Oh My Zsh - des centaines, dont Powerlevel10k |
| cd implicite | Non | setopt AUTO_CD |
| Array associatifs | Bash 4+ seulement | Natif depuis toujours |
Sur Oh My Bash - soyons justes
Oh My Bash existe, fonctionne, et n'est pas une blague. C'est un fork d'Oh My Zsh pour bash, avec des plugins pour git, docker, SSH, de la complétion, des aliases et une structure modulaire qui évite de tout empiler dans .bashrc. Si vous tenez absolument à rester sur bash, installez-le.
Ce que vous n'aurez pas : l'autocomplétion contextuelle native de zsh, zsh-autosuggestions, zsh-syntax-highlighting, le globbing qualifié, et les 15 ans d'écosystème d'Oh My Zsh derrière vous. L'écosystème d'Oh My Bash est plus petit, moins activement maintenu, avec moins de themes et moins de documentation communautaire. C'est l'équivalent de commander le même plat que votre voisin mais en version allégée parce que le chef était moins inspiré ce jour-là.
C'est un choix valide. C'est juste un choix moins bon.
La vraie distinction
bash est parfait pour les scripts. zsh est parfait pour l'usage interactif. Ce sont deux cas d'usage différents et les confondre est l'erreur classique.
Vos scripts de déploiement, vos crons, vos pipelines CI/CD : continuez à écrire #!/bin/bash. La portabilité et la prévisibilité comptent plus que les fonctionnalités avancées dans un contexte automatisé.
Votre shell interactif au quotidien : zsh. Vous n'avez aucune raison de vous infliger bash en 2026 à moins d'être payé pour ça.
Et si quelqu'un dans votre équipe vous dit "je reste sur bash par principe", demandez-lui s'il conduit aussi une Renault 4 par principe. La réponse sera instructive.
Installation et premier démarrage
# Debian/Ubuntu
apt install zsh
# macOS (déjà installé, mais pour avoir la version récente)
brew install zsh
# Vérifier la version
zsh --version
# Définir zsh comme shell par défaut
chsh -s $(which zsh)
Au premier lancement, zsh vous propose un assistant de configuration. Tapez q pour passer - Oh My Zsh va tout configurer à votre place dans deux minutes.
Oh My Zsh - le gestionnaire de config que tout le monde installe
Oh My Zsh n'est pas zsh. C'est un framework de configuration de zsh - un ensemble de plugins, de themes et de helpers qui rendent zsh immédiatement utilisable sans passer trois semaines à lire la documentation.
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Oui, curl | sh. On vient de passer un guide entier sur curl à vous expliquer pourquoi c'est une mauvaise idée. Mais c'est Oh My Zsh, pas un script de la NSA, et vous avez lu le code avant de lancer, évidemment.
Oh My Zsh crée un ~/.zshrc avec une config de base et installe ses fichiers dans ~/.oh-my-zsh/. Votre ~/.zshrc précédent est sauvegardé si vous en aviez un.
La config ~/.zshrc - poser les bases
# ~/.zshrc
# Oh My Zsh
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="agnoster" # on y reviendra
plugins=(git docker kubectl terraform aws node python pip)
source $ZSH/oh-my-zsh.sh
# Options zsh essentielles
setopt AUTO_CD # taper le nom d'un dossier = cd dedans
setopt CORRECT # corriger les typos de commandes
setopt HIST_IGNORE_DUPS # ne pas dupliquer dans l'historique
setopt HIST_IGNORE_SPACE # ne pas historiser les commandes commençant par un espace
setopt SHARE_HISTORY # partager l'historique entre tous les terminaux
setopt EXTENDED_HISTORY # horodater l'historique
setopt AUTO_PUSHD # cd pousse dans la pile de dossiers
setopt PUSHD_IGNORE_DUPS # pas de doublons dans la pile
# Historique
HISTSIZE=50000
SAVEHIST=50000
HISTFILE=~/.zsh_history
# Variables d'environnement
export EDITOR="vim"
export LANG="fr_FR.UTF-8"
export LC_ALL="fr_FR.UTF-8"
HIST_IGNORE_SPACE - le truc que personne ne connaît
Commande précédée d'un espace : elle s'exécute normalement mais n'apparaît pas dans l'historique. Parfait pour les commandes avec des tokens, des mots de passe ou des arguments sensibles que vous ne voulez pas voir traîner dans ~/.zsh_history.
curl -H "Authorization: Bearer mon_token_secret" https://api.example.com
# (espace avant curl - n'apparaît pas dans l'historique)
Votre RSSI vous remercie. Votre historique git blame également.
AUTO_PUSHD et la navigation
cd /var/log
cd /etc/nginx
cd /opt/app
dirs -v
# 0 /opt/app
# 1 /etc/nginx
# 2 /var/log
cd -2 # retour à /var/log
cd -1 # retour à /etc/nginx
Vous naviguez dans votre pile de répertoires comme dans l'historique de votre navigateur. Pas besoin de retaper les chemins. Si vous faites encore cd ../../../ en 2026, ce guide est pour vous.
Le theme - Powerlevel10k, point final
Oh My Zsh vient avec une centaine de themes. La majorité sont des curiosités historiques que personne n'utilise depuis 2015. Le theme que vous voulez s'appelle Powerlevel10k et il n'est pas inclus par défaut.
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git \
${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
Dans ~/.zshrc :
ZSH_THEME="powerlevel10k/powerlevel10k"
Relancez votre terminal. Powerlevel10k lance un assistant de configuration interactif avec des questions sur vos préférences visuelles. Répondez, il génère une config dans ~/.p10k.zsh. Si vous changez d'avis plus tard :
p10k configure
Ce que Powerlevel10k affiche
- Le répertoire courant avec les dossiers parents tronqués intelligemment
- La branche git courante avec le statut (modifications, commits en avance/retard)
- Le contexte kubectl actuel - le cluster et le namespace en cours
- L'environnement Python/Node/Ruby actif
- Le temps d'exécution de la dernière commande si elle a pris plus de 3 secondes
- Le code de retour de la dernière commande si non-zéro
- L'utilisateur et le host si vous êtes en SSH
Tout ça sans ralentir perceptiblement votre terminal parce que Powerlevel10k est écrit de façon obsessionnelle pour la performance. Son auteur a passé des semaines à optimiser des microsecondes. C'est le genre de projet open source qui redonne foi en l'humanité, ou du moins en sa sous-catégorie qui passe ses soirées à profiler des shells.
Les polices Nerd Fonts
Powerlevel10k utilise des glyphes spéciaux pour les icônes. Sans une Nerd Font, vous voyez des carrés ou des points d'interrogation - exactement comme votre chef quand vous lui expliquez pourquoi le déploiement a raté.
# macOS
brew install --cask font-meslo-lg-nerd-font
Configurez ensuite votre terminal (iTerm2, Alacritty, Ghostty, Windows Terminal) pour utiliser MesloLGS NF comme police.
Les plugins - ce qu'il faut, pas ce qu'on peut
Oh My Zsh vient avec 300+ plugins. La tentation d'en activer 50 est réelle et compréhensible. Résistez. Chaque plugin chargé au démarrage ralentit l'ouverture de votre terminal. Et vous n'utiliserez pas 45 de ces 50 plugins. Vous le savez. Je le sais. On fait semblant que non.
Les plugins inclus dans Oh My Zsh à activer sans hésiter
plugins=(
git # aliases git (ga, gc, gp, gl, gst, glog...)
docker # complétion docker
kubectl # complétion kubectl + alias k=kubectl
terraform # complétion terraform
aws # complétion awscli + AWS_PROFILE dans le prompt
sudo # ESC ESC pour ajouter sudo à la commande précédente
copypath # copier le chemin courant dans le presse-papier
dirhistory # ALT+LEFT/RIGHT pour naviguer dans l'historique de répertoires
jsontools # pp_json, is_json, urlencode_json, urldecode_json
web-search # google terme, github terme depuis le terminal
)
sudo - le plugin qui mérite un paragraphe
Vous tapez une commande, vous appuyez sur Entrée, vous réalisez que vous avez oublié sudo. Normalement : flèche du haut, début de ligne, sudo , Entrée. Avec le plugin sudo : flèche du haut, ESC ESC. Le sudo s'ajoute automatiquement. C'est une économie de deux secondes par jour. Sur une carrière de 30 ans, ça fait environ 6 heures. Les 6 heures les moins chères de votre vie professionnelle.
Les trois plugins à installer séparément - les vrais indispensables
Ces trois plugins ne sont pas inclus dans Oh My Zsh et sont pourtant plus utiles que 90% de ceux qui le sont. C'est injuste. C'est comme ça.
zsh-autosuggestions - suggestions basées sur l'historique
git clone https://github.com/zsh-users/zsh-autosuggestions \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
En tapant une commande, zsh affiche en gris la complétion la plus probable basée sur votre historique. Flèche droite pour accepter, Ctrl+F pour accepter mot par mot. C'est la fonctionnalité qui fait dire "attendez c'est quoi ce truc en gris ?" à tous vos collègues qui vous regardent travailler. Profitez-en, c'est rare d'avoir l'air compétent sans avoir rien fait.
zsh-syntax-highlighting - coloration syntaxique en temps réel
git clone https://github.com/zsh-users/zsh-syntax-highlighting \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
Les commandes valides s'affichent en vert, les commandes inconnues en rouge, les options en jaune, les strings en bleu. Vous repérez les typos avant d'appuyer sur Entrée. Le nombre de fois où vous avez lancé dockre ps et attendu une seconde avant de réaliser - ce plugin règle ça définitivement. À activer en dernier dans la liste des plugins - contrainte du plugin lui-même, pas un caprice.
zsh-z - navigation par fréquence
git clone https://github.com/agkozak/zsh-z \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-z
z apprend les répertoires que vous visitez et vous permet d'y revenir avec un fragment de nom. Après quelques jours d'utilisation :
z radar # cd /home/cyril/projets/rudeops/radar
z nginx # cd /etc/nginx
z log # cd /var/log/nginx (ou le dossier de logs le plus visité)
Pas besoin de taper le chemin complet. z trouve le répertoire le plus probable. C'est la fonctionnalité qui rend le retour à un terminal sans z physiquement douloureux, comme rétrograder vers un téléphone à touches après un smartphone.
Dans ~/.zshrc :
plugins=(
git docker kubectl terraform aws sudo copypath dirhistory jsontools
zsh-autosuggestions
zsh-syntax-highlighting # toujours en dernier
)
# zsh-z séparément
source ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-z/zsh-z.plugin.zsh
Les aliases - votre productivité en clair
Oh My Zsh charge des centaines d'aliases via ses plugins. Ceux du plugin git notamment sont bien fournis - gst, gp, gl, glog, et une vingtaine d'autres que vous n'utiliserez jamais mais qui sont là. Vos propres aliases sont souvent plus utiles parce qu'ils correspondent à ce que vous faites vraiment.
# ~/.zshrc
# Navigation
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias ~='cd ~'
# Listage - ou avec eza si installé (recommandé)
alias ls='eza --icons'
alias ll='eza -alF --icons --git'
alias lt='eza --tree --level=2 --icons'
# Git
alias gs='git status'
alias gd='git diff'
alias gds='git diff --staged'
alias gundo='git reset HEAD~1 --mixed'
alias gwip='git commit -am "WIP"'
# Docker
alias dps='docker ps'
alias dpsa='docker ps -a'
alias dimg='docker images'
alias dex='docker exec -it'
alias dlogs='docker logs -f'
# Kubernetes
alias k='kubectl'
alias kns='kubectl config set-context --current --namespace'
alias kctx='kubectl config use-context'
alias kgp='kubectl get pods'
alias kgpa='kubectl get pods -A'
alias kdp='kubectl describe pod'
alias klogs='kubectl logs -f'
# Système
alias ports='ss -tlnp'
alias myip='curl -s ifconfig.me'
alias path='echo $PATH | tr ":" "\n"'
alias reload='source ~/.zshrc'
alias zshconfig='$EDITOR ~/.zshrc'
# Sécurité - confirmation sur les commandes destructives
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
Les fonctions - plus puissantes que les aliases
# Créer un dossier et s'y déplacer immédiatement
mkcd() { mkdir -p "$1" && cd "$1" }
# Extraire n'importe quelle archive sans se souvenir de la syntaxe
extract() {
case $1 in
*.tar.gz) tar xzf $1 ;;
*.tar.bz2) tar xjf $1 ;;
*.zip) unzip $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.7z) 7z x $1 ;;
*) echo "Format non supporté: $1" ;;
esac
}
# Chercher dans l'historique
hist() { history | grep "$1" }
# Quel process écoute sur ce port
port() { lsof -i :$1 }
# Backup rapide d'un fichier avant de le modifier
bak() { cp "$1" "$1.bak.$(date +%Y%m%d_%H%M%S)" }
# SSH + tmux automatique
ssht() { ssh -t "$1" "tmux new-session -A -s main" }
# Kubectl exec sur un pod par pattern de nom
kexec() {
kubectl exec -it \
$(kubectl get pods | grep $1 | head -1 | awk '{print $1}') \
-- ${2:-bash}
}
La complétion - ce que zsh fait vraiment mieux
La complétion de zsh est contextuelle. Elle ne complète pas juste les commandes et les fichiers - elle comprend le contexte de ce que vous faites et adapte les suggestions en conséquence.
# Complétion des options avec description
kubectl get <TAB>
# pods - List pods
# services - List services
# deployments - List deployments
# Complétion des valeurs
kubectl get pods -n <TAB>
# default kube-system monitoring production
# Complétion contextuelle des fichiers
tar xzf <TAB>
# (liste uniquement les .tar.gz et .tgz - pas les .jpg)
Configurer la complétion
autoload -Uz compinit && compinit
zstyle ':completion:*' menu select
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
zstyle ':completion:*:descriptions' format '%F{yellow}-- %d --%f'
zstyle ':completion:*' group-name ''
zstyle ':completion:*' squeeze-slashes true
Le globbing qualifié - la vraie différence avec bash
C'est ici que zsh creuse vraiment l'écart. Le globbing qualifié permet de filtrer les fichiers directement dans l'expression glob, sans find, sans xargs, sans pipe. Bash ne peut pas faire ça nativement.
# Récursif - bash fait aussi ** avec globstar activé
ls **/*.js # tous les .js dans les sous-dossiers
ls **/*.{js,ts} # tous les .js et .ts
# Par date de modification - bash ne peut pas faire ça
ls *(om[1,5]) # les 5 fichiers les plus récents
ls *(Om[1,3]) # les 3 fichiers les plus anciens
# Par taille - bash ne peut pas faire ça non plus
ls *(Lk+100) # fichiers > 100ko
ls *(Lm-1) # fichiers < 1Mo
# Négation - bash a extglob mais c'est moins élégant
ls ^*.log # tout sauf les .log
ls ^(*.log|*.tmp) # tout sauf .log et .tmp
# Combinaisons - là bash capitule complètement
ls **/*.log(om[1,10]) # les 10 fichiers .log les plus récents récursivement
Ce qui en bash nécessite find -name "*.log" -newer ref -printf "%T@ %p\n" | sort -rn | head -10 | cut -d' ' -f2- devient une ligne en zsh. Personne ne prétend que la syntaxe zsh est plus lisible. Mais elle est là, elle fonctionne, et elle vous évite de googler la syntaxe de find pour la 400ème fois.
La config finale - votre ~/.zshrc complet
# ~/.zshrc - config RudeOps
# Powerlevel10k instant prompt (doit être en premier)
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# Oh My Zsh
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="powerlevel10k/powerlevel10k"
plugins=(
git
docker
kubectl
terraform
aws
sudo
copypath
dirhistory
jsontools
zsh-autosuggestions
zsh-syntax-highlighting # toujours en dernier
)
source $ZSH/oh-my-zsh.sh
source ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-z/zsh-z.plugin.zsh
# Options
setopt AUTO_CD
setopt CORRECT
setopt HIST_IGNORE_DUPS
setopt HIST_IGNORE_SPACE
setopt SHARE_HISTORY
setopt EXTENDED_HISTORY
setopt AUTO_PUSHD
setopt PUSHD_IGNORE_DUPS
# Historique
HISTSIZE=50000
SAVEHIST=50000
HISTFILE=~/.zsh_history
# Variables
export EDITOR="vim"
export LANG="fr_FR.UTF-8"
# Complétion
autoload -Uz compinit && compinit
zstyle ':completion:*' menu select
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
zstyle ':completion:*' group-name ''
# Aliases navigation
alias ..='cd ..'
alias ...='cd ../..'
alias ~='cd ~'
alias ls='eza --icons'
alias ll='eza -alF --icons --git'
alias lt='eza --tree --level=2 --icons'
# Aliases git
alias gs='git status'
alias gd='git diff'
alias gundo='git reset HEAD~1 --mixed'
alias gwip='git commit -am "WIP"'
# Aliases docker/k8s
alias dps='docker ps'
alias k='kubectl'
alias kns='kubectl config set-context --current --namespace'
alias kgp='kubectl get pods'
alias kgpa='kubectl get pods -A'
alias klogs='kubectl logs -f'
# Aliases système
alias ports='ss -tlnp'
alias myip='curl -s ifconfig.me'
alias reload='source ~/.zshrc'
# Fonctions
mkcd() { mkdir -p "$1" && cd "$1" }
extract() {
case $1 in
*.tar.gz) tar xzf $1 ;;
*.tar.bz2) tar xjf $1 ;;
*.zip) unzip $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*) echo "Format non supporté: $1" ;;
esac
}
ssht() { ssh -t "$1" "tmux new-session -A -s main" }
kexec() {
kubectl exec -it \
$(kubectl get pods | grep $1 | head -1 | awk '{print $1}') \
-- ${2:-bash}
}
# Powerlevel10k
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
Performance - quand Oh My Zsh devient lent
Oh My Zsh peut ralentir l'ouverture du terminal si vous chargez trop de plugins ou si compinit revalide les completions à chaque démarrage. Comme votre pipeline CI après que quelqu'un a ajouté 12 étapes de validation "juste pour être sûr".
# Mesurer le temps d'ouverture
time zsh -i -c exit
# Profiler ligne par ligne
zsh -i -c "zprof" 2>&1 | head -30
Si votre shell met plus d'une seconde à ouvrir, vous avez un problème. Solutions :
# Accélérer compinit - ne vérifier que si les fichiers ont changé
autoload -Uz compinit
if [[ -n ${ZDOTDIR}/.zcompdump(#qN.mh+24) ]]; then
compinit
else
compinit -C
fi
Zinit - si Oh My Zsh est vraiment trop lent
Zinit charge les plugins en parallèle et en différé. Un shell qui mettait 800ms peut descendre sous 200ms :
bash -c "$(curl --fail --show-error --silent --location \
https://raw.githubusercontent.com/zdharma-continuum/zinit/HEAD/scripts/install.sh)"
# ~/.zshrc avec Zinit
zinit light zsh-users/zsh-autosuggestions
zinit light zsh-users/zsh-syntax-highlighting
zinit light agkozak/zsh-z
zinit ice depth=1; zinit light romkatv/powerlevel10k
Si vous n'avez pas ce problème de performance, Oh My Zsh est suffisant. N'optimisez pas ce qui n'est pas cassé - vous avez sûrement des incidents de prod plus urgents.
À retenir
| Config | Pour quoi |
|---|---|
setopt HIST_IGNORE_SPACE | Espace devant = pas dans l'historique |
setopt SHARE_HISTORY | Historique partagé entre terminaux |
setopt AUTO_CD | cd implicite |
setopt AUTO_PUSHD | Navigation dans la pile de répertoires |
zsh-autosuggestions | Suggestions depuis l'historique |
zsh-syntax-highlighting | Coloration en temps réel |
zsh-z | Navigation par fréquence |
plugin sudo | ESC ESC pour ajouter sudo |
time zsh -i -c exit | Mesurer le temps de démarrage |
zsh -i -c "zprof" | Profiler ce qui ralentit |
FAQ
Oh My Zsh vs Zinit vs Antigen - lequel choisir ?
Oh My Zsh si vous démarrez - la communauté est massive, les plugins sont nombreux, la doc est partout. Zinit si la performance vous préoccupe sérieusement. Antigen si vous aimez les choses qui ne sont plus activement maintenues. Oh My Zsh pour 90% des cas, ne cherchez pas plus loin.
Est-ce que mes scripts bash cassent si je passe à zsh ?
Non. Le shebang #!/bin/bash dans vos scripts les fait toujours s'exécuter avec bash. Votre shell interactif et votre shell de script sont deux choses différentes. Tout ce qui a #!/bin/bash continue de fonctionner exactement comme avant. C'est la question numéro un et la réponse est toujours non.
Powerlevel10k vs Starship - lequel choisir ?
Powerlevel10k si vous n'utilisez que zsh - plus riche, mieux intégré, plus personnalisable. Starship si vous jongler entre plusieurs shells ou systèmes - il est cross-shell (bash, zsh, fish, PowerShell). Pour un DevOps qui reste sur zsh, Powerlevel10k sans hésiter.
z vs autojump vs zoxide ?
zsh-z est le plus simple à installer avec Oh My Zsh. zoxide est écrit en Rust, plus rapide, et dispose d'une interface interactive avec fzf - zi pour chercher dans vos dossiers visités. autojump est l'original mais plus lent et moins maintenu. Si vous avez fzf installé, zoxide vaut le détour.
Mes collègues utilisent bash. Je vais avoir des problèmes ?
Vos scripts : non. Votre terminal : aucun impact sur eux. La seule friction possible est si vous partagez des dotfiles en équipe - mais si c'est le cas vous avez des problèmes bien plus profonds que le choix du shell. Comme partager des dotfiles en équipe.
Oh My Bash ça vaut le coup si je veux rester sur bash ?
Pour une transition en douceur ou sur un système où zsh n'est pas disponible, oui - c'est toujours mieux qu'un .bashrc nu. Mais si vous avez le choix, installez zsh. Le delta de confort est significatif et vous ne reviendrez pas en arrière.
Pour aller plus loin
- Oh My Zsh - le site officiel et la liste complète des plugins
- Powerlevel10k - la doc complète du theme
- zsh-users - autosuggestions, syntax-highlighting, history-substring-search
- Oh My Bash - pour les irréductibles
- Zinit - si la performance vous préoccupe
man zshall- 50 000 lignes de documentation. La réponse à votre question est dedans. Bonne chance pour la trouver.