Vous vous ennuyez un peu ? Vous voulez pigmenter votre expérience sous Linux ? Personnaliser au maximum votre prompt ? Ou simplement voir du pays, changer un peu du super omniprésent Bash ? Pourquoi pas tenter ZSH ?
Est-ce douleureux ? Non. Il y a vraiment très peu de différence à l’usage. C’est d’ailleurs un des gros avantages, ZSH offre une compatibilité assez complète avec Bash. Ce qui n’est pas forcément le cas d’autres shells plus exotiques. Mais ZSH offre aussi beaucoup de petits plus qui au final vous le feront aimer d’amour.
L’auto-complètement (autocompletion)
Par rapport au Bash par défaut, ZSH propose des améliorations :
- un menu navigable avec les flèches ou tabulation quand il y a plusieurs choix possibles
- complète même à différents endroits les chemins complets (cd /e/X[tab] => cd /etc/X11)
Mais l’auto-complètement fonctionne aussi pour les options/arguments des commandes si vous faites un « tab » après un -.
Voici quelques captures pour mieux comprendre.
L’auto-complètement fonctionne aussi sur les variables d’environnement par ex.
Et même avec certaines commandes, de manière intelligente, comme avec kill (qui proposera la liste de vos processus etc). Que du bonheur !
L’historique plus évolué
Il s’agit en fait de la première fonctionnalité qui m’avait poussée à tester ZSH au début. Quand vous ouvrez plusieurs terminaux sur votre poste, avec Bash, vous aurez un historique par terminal. Avec ZSH, vous pourrez avoir un historique partagé. Plus besoin de se rappeler dans quel terminal une commande a été tapée.
Il y a aussi la possibilité de parcourir les arguments d’une commande de manière intelligente :
cd [UP]
parcourra dans l’historique les options de cd uniquement. J’arrive certes à faire presque l’équivalent sous Bash, mais via un raccourcis à 3 touches (du moins avec un clavier AZERTY), et ça parcourt bêtement tous les arguments.
Les prompts
Autre amélioration, les prompts. En plus du prompt classique à gauche, ZSH propose aussi un prompt à droite (pour avoir l’heure, la branche git courante etc).
Pour vous rendre compte du degré de personnalisation possible :
https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
https://github.com/robbyrussell/oh-my-zsh/wiki/External-themes
Navigation directe
Un peu plus difficile à prendre en main. Pourquoi taper cd devant un nom de répertoire ? Quand on pourrait juste taper le nom du répertoire ? Que pourrait-on bien faire d’autre de toute façon avec le nom d’un répertoire.
cd Documents
devient
Documents
J’avoue que je n’ai toujours pas pris le coup…
L’autojump
Ce n’est pas une exclusivité ZSH mais il est souvent associé à ce shell. Dans la droite lignée des outils pour feignasse sysadmin, autojump est juste génial. J’assume ma feignassitude !!!
En gros, autojump va collecter les répertoires que vous utilisez, pour les pondérer si besoin, et avec la commande « j » (oui juste j, comme jump), vous pourrez retourner dans un de ces répertoires en tapant qu’une partie du chemin.
Ex avec ~/Documents/Personnel/vaches/Marguerite
Avec bash, sans autojump :
cd ~/Doc[tab]Per[tab]vaches/Mar[tab]+[entrée]
Avec ZSH, sans autojump :
cd ~/Doc/Per/vac/Mar[tab]+[entrée]
Avec ZSH et autojump :
j Mar[entrée]
Pour connaitre les stats :
j -s
Vous inquiétez pas, la base reste en locale.
Oh My ZSH
LE principal avantage de passer à ZSH est de pouvoir utiliser oh-my-zsh ! C’est un ensemble de configuration, scripts, plugins etc pour améliorer, configurer et personnaliser plus facilement ZSH. En fait oh-my-zsh gomme les quelques défauts qui rendait le passage à ZSH encore difficile. Certes ZSH propose un outil de configuration, normalement activé lors de son premier lancement, mais ça reste complexe vu le nombre d’options.
Avec oh-my-zsh, ce sont des dizaines de configuration partagées, et surtout des plugins prêt à l’emploi. L’ensemble dans un dépôt git régulièrement mis à jour !
Exemple le plugin pour dnf, qui va créer des alias bien pratiques :
dnfs => dnf search dnfi => sudo dnf install dnfu => sudo dnf update etc
Ou encore le plus connu, le plus git, qui vous indiquera dans le prompt, la branche actuelle.
Je ferais sûrement un billet à part pour Oh-My-ZSH.
Les défauts
Après de nombreuses années d’utilisation, et pour être objectif, je vais aussi citer les défauts que j’ai pu constater.
ZSH n’est pas BASH
L’échappement de certains caractères comme le * est à respecter plus strictement avec ZSH. Sous Bash je n’ai jamais eu de soucis à faire par ex « dnf list kernel* » alors qu’avec ZSH il va vouloir chercher un fichier local. J’ai pris l’habitude du coup de faire « dnf list kernel\* ».
Et, c’est tout !
ZSH n’est pas aussi répandu
Au quotidien, à 99% les machines/serveurs etc sont installés avec Bash comme shell par défaut. KSH pour les plus tordus, mais très rarement ZSH.
Quand je fais des scripts shell, je continu donc d’utiliser le shebang #!/bin/bash (ou autres variantes), pour que ça soit portable.
Les extras nécessaires
Beaucoup de personnalisations pour ZSH reposent sur des outils tierces. Le plus courant étant des polices spécifiques (ex powerline). Ce n’est pas toujours évident d’installer tout ça partout. Ce n’est pas très gênant car on parle que des personnalisations, mais c’est à savoir.
Conclusion
Le mieux serait de vous faire votre propre idée, en testant vous même ZSH ?
Voici un billet sur comment changer de shell.
Et un sur l’installation de ZSH et Oh-My-ZSH.