Passer de Bash à Zsh
Sommaire
I. Présentation
Le Shell est une couche logicielle d'un système d'exploitation qui permet d’interpréter les commandes pour effectuer des actions.
Bash (Bourn Again Shell) est le Shell par défaut sur beaucoup de distribution Linux, il est très pratique, mais on peut se demander s’il n'y a pas de Shell plus intéressant ?
J'ai décidé de tester Zsh (Z Shell) par curiosité et je l'ai tout de suite adopté !
Les avantages de Z Shell sont multiples :
- Autocomplétion avancée
- Correction orthographique des commandes saisies
- Support avancé de Git
- Historique partagé entre les différents Shell ouverts.
II. Installation de Zsh
Pour installer Zsh, selon votre distribution, saisissez la commande suivante :
Ubuntu / Debian :
sudo apt-get install zsh
ArchLinux :
sudo pacman -S zsh
Fedora :
sudo yum install zsh
Vous pouvez maintenant le lancer pour essayer en lançant :
zsh
Il vous proposera d'éditer le fichier de configuration, pour ignorer, faite Entrée.
Voici Zsh sans configuration : (il peut sembler rustre, mais on va vite le personnaliser)
III. Installation d'Oh-My-Zsh
Il existe un framework pour Zsh, appelé Oh My Zsh, il fournit de nombreux plug-ins (support de PHP, Python, PostgreSQL ...) et de nombreux thèmes (une centaine).
Son installation se fait avec une simple commande :
curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh
Je vous conseille de l'installer directement après Zsh, car il permet une configuration simplifiée (grâce aux thèmes) et l'ajout de plug-ins intéressants.
Une fois "Oh My Zsh" d'installé, il suffit de redémarrer Zsh pour prendre en compte les changements. (CTRL + D puis "zsh" )
Quand on utilise Zsh, on oublie le fichier .bashrc car il est spécifique à Bash, maintenant on utilise .zshrc.
La gestion des alias se fait comme dans Bash, vous pouvez "importer" vos alias dans .zshrc avec cette structure :
alias please="sudo"
La gestion de l'environnement (proxy par exemple) se fait dans le fichier /etc/zsh/zshenv, vous pouvez ensuite ajouter les paramètres qui vont bien :
export http_proxy="http://proxy.exemple.org:8080" export ftp_proxy="ftp://proxy.exemple.org:8080"
A. Les thèmes
Le thème par défaut est très minimaliste :
La liste des thèmes est disponible sur GitHub.
Pour changer son thème, il faut simplement éditer .zshrc et modifier la ligne :
ZSH_THEME="robbyrussell"
Il suffit de remplacer "robbyrussel" par le nom du thème souhaité.
Un des avantages de Zsh, c'est qu'il permet de naviguer dans la liste des fichiers avec les flèches du clavier, pratique pour naviguer dans une multitude de dossiers :
Pour votre info, j'utilise le thème "jreese" !
B. Les plug-ins
Il existe plein de plug-ins pour Zsh, il suffit d'ajouter une ligne dans le fichier /home/user/.zshrc :
Exemple n°1 - Git :
plug-ins=(git)
Ensuite, après redémarrage de Zsh, on remarque que de nouveaux alias apparaissent (la liste est tronquée) :
Zsh gère également l'autocomplétion des commandes git.
Exemple n°2 - Archlinux :
plug-ins=(archlinux)
La liste de tous les plug-ins est disponible ici.
IV. Conclusion
Je n'avais jamais essayé d'autres Shell que Bash (sous Unix). Zsh, peut paraître un peu rebutant aux premiers abords, mais après quelques configurations, il devient mon nouveau Shell.
Si vous aussi vous souhaitez remplacer Bash par zsh, saisissez :
chsh -s /bin/zsh
Si vous souhaité allez plus loin avez Zsh, je vous conseille d'aller lire le Wiki d'ArchLinux sur le sujet : Zsh Wiki
Yo, en effet moi aussi j’utilise zsh qui est bien plus pratique que bash. Il y a un nouveau qui a l’air super et facile, fish: http://fishshell.com/ Tu l’as déjà essayé ?
J’utilise aussi fish maintenant, il est très complet le petit détail en plus :
Lors de saisie de commande et d’appuis sur tab il affiche entre parenthèse ce que fais la commande.
Par contre mon .bashrc n’est pas non plus compatible avec fish…
J’aime bien zsh, je l’ai utilisé un temps, il est clair qu’il offre de gros avantages par rapport à bash, mais j’ai rapidement remplacé oh-my-zsh (qui est une usine à gaz et peux montrer des lenteurs, non seulement au premier prompt, mais aussi par la suite, pour ceux qui ont beaucoup de modules d’activés) par Prezto, qui propose à peu près la même chose (plugins, promts, etc.) mais en s’efforçant de ne pas ralentir le shell, et de rester simple à l’usage. J’utilisais le prompt « steeef ».
Mais le problème reste que si zsh a beaucoup de possibilités, pour pouvoir les exploiter correctement il faut nécessairement installer un framework comme oh-my-zsh ou prezto. Et c’est là que le bât blesse parce que tout le boulot est fait en script shell, ce qui n’est pas terrible pour l’efficacité…
Du coup je suis passé à fish et je dois dire que je ne le regrette pas. La philosophie de fish, c’est de fournir une expérience de shell moderne, puissant et complet, comme zsh + omz ou prezto, mais en intégrant les avancées des framework dans le code du shell et en proposant une bonne configuration par défaut. Par contre fish n’est pas POSIX, ça peut être un avantage comme un inconvénient. Personnellement ça ne me pose pas de problème, ça n’empêche pas d’écrire/d’executer ses scripts en !#/bin/bash quand on veut rester compatible. Et la documentation sur le site est bien faite et permet de scripter facilement en fish.