Sur les syst√®mes bas√©s Linux ou Unix, il existe un √©l√©ment de base qui s’appelle le shell. Il s’agit de l’interpr√©teur qui permet √† l’utilisateur d’entrer diff√©rentes commandes pour qu’elles soient ex√©cut√©es par le syst√®me. Par d√©faut sur de nombreuses distributions Linux, cet interpr√©teur est bash, pour Bourne-again Shell, qui visait √† remplacer le Bourne-shell aussi connu sous le nom de sh.

Zsh est donc un autre interpr√©teur de commandes disponible sous Linux et d’autres Unix. C’est d’ailleurs le shell par d√©faut de MacOS depuis 2019. Bien qu’il soit aussi vieux que Bash, il est encore assez peu mis par d√©faut alors qu’il poss√®de quelques atouts sympa, mais aussi une belle collection d’extensions et de th√®mes qui ont √©t√© regroup√©s par le projet “Oh My Zsh”.

L’un des √©l√©ments les plus pratiques de zsh est que son auto-completion est interactive. Lorsqu’on appuie deux fois rapidement sur la touche Tabulation, le shell vous proposera les correspondances pour les fichiers commen√ßant par les caract√®res que vous avez saisi (ou alors il listera tout le dossier). Bash vous proposera une simple liste tandis que Zsh vous permettra de s√©lectionner un √©l√©ment avec les fl√®ches.

Cette sélection fonctionne aussi avec une commande. Petit exemple ci-dessous :

autocompletion Ces captures d’√©cran anim√©es sont r√©alis√©es avec Peek

Une autre fonctionnalit√© que j’appr√©cie beaucoup et que j’avais connu avec Ksh sous AIX, c’est la substitution d’un emplacement. Dans le cas o√Ļ vous √™tes dans une arborescence dont seul un nom de dossier change (exemple : /home/user/Downloads /home/user/Documents), la commande cd de Zsh permet de substituer de la fa√ßon suivante :

cd Documents Downloads

Résultat :

autocompletion

Oui, je fais 40 fautes de frappe à la seconde

Installer zsh

Zsh est généralement disponible dans les repos de la plupart des distributions Linux. Il suffit donc de le chercher dans le gestionnaire de paquets de celle-ci. Dans mon cas avec Fedora :

$ sudo dnf install zsh

Pour basculer dessus il suffit ensuite de l’appeler gr√Ęce √† la commande zsh.

zsh start

La premi√®re fois, zsh affiche un √©cran de param√©trage et le fera aussi longtemps que le fichier ~/.zshrc est absent. Si vous le souhaitez, vous pouvez lancer l’option 1 qui va vous poser plusieurs questions pour param√©trer l’environnement. Sinon, vous pouvez directement aller √† la section d’apr√®s avec l’installation de Oh My Zsh qui va s’occuper de tout.

L’indicateur montrant que zsh est actif est le changement du caract√®re pr√©c√©dent le curseur de texte. Le # de Bash est remplac√© par le % de Zsh.

Installer Oh My Zsh

Oh My Zsh est un framework pour zsh qui permet de g√©rer la configuration de celui-ci et le personnaliser d’une mani√®re tr√®s accessible. Par personnaliser, cela signifie d’ajouter des th√®mes graphiques et diverses fonctionnalit√©s sympa !

Pour lancer l’installation, il suffit de t√©l√©charger le script shell depuis leur repo Github. Je recommande d’utiliser la derni√®re m√©thode qu’ils proposent √† savoir t√©l√©charger le script puis l’ex√©cuter soit-m√™me. Il est toujours plus sage de le lire avant pour comprendre ce qu’il fait. Je ne suis pas un grand fan des m√©thodes souvent propos√©es avec une ex√©cution directe d’un script t√©l√©charg√© sur Internet.

$ wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh
$ sh install.sh

install oh my zsh

Ici je suis sur un live-CD de Fedora. Sur mon véritable environnement, il a demandé si je voulais activer zsh par défaut, action qui a requise le mot de passe sudo.

Personnalisation

Oh My Zsh aura cr√©√© dans le fichier ~/.zshrctout un tas de param√®tres. D’ailleurs, si vous aviez personnalis√© votre ~/.bashrc il conviendra de les reporter car ce fichier ne sera plus charg√© au lancement du shell.

Attention, n’oubliez pas de recharger le shell apr√®s tout changement du fichier ~/.zshrc de la mani√®re suivante : . ~/.zshrc ou encore source ~/.zshrc. Ou encore en fermant et rouvrant un terminal.

L’un des premiers changements que vous aurez s√Ľrement envie de faire est le th√®me graphique. Il s’agit de la ligne suivante dans ~/.zshrc :

ZSH_THEME="robbyrussell"

Celui que j’utilise dans la premi√®re capture d’√©cran, et probablement l’un des plus populaires, est agnoster. Vous en trouverez tout un tas sur le repo Github du projet dont le lien est dans le fichier de param. Si l’envie vous prend, vous pouvez demander une s√©rie de th√®mes al√©atoires. Pour cela, remplacez le th√®me par random et liste ensuite ceux que vous souhaitez avoir.

ZSH_THEME="random"
ZSH_THEME_RANDOM_CANDIDATES=(
  "robbyrussell"
  "agnoster"
)

## au besoin on peut aussi faire une liste d'exclusions
ZSH_THEME_RANDOM_IGNORED=(pygmalion tjkirch_mod)

Ensuite, Oh My Zsh supporte pas mal de plugins. Attention √† ne pas trop en activer, vous risqueriez de ralentir votre shell. Par d√©faut, il propose le plugin git qui affiche la branche courante sur l’emplacement o√Ļ vous vous trouvez est un repo Git (et plein d’alias sympa). Dans la capture d’√©cran en haut de l’article, vous pouvez le voir avec l’information “master”.

Comme pour les th√®mes, de nombreux plugins existent. Il s’agit de la variable plugins du fichier. Ici un exemple avec les plugins kubectl et helm.

plugins=(git)
## pour en rajouter :
plugins=(git kubectl helm)

Attention √† ne pas mettre de s√©parateur autre qu’un espace, sinon vous cassez tout !

Aller un peu plus loin

Par défaut, Oh My Zsh vous proposera chaque semaine de mettre à jour les sources du framework présent sur votre ordinateur. Si cela vous ennuie, vous pouvez les installer en arrière-plan de manière silencieuse.

Toujours dans ~/.zshrc, modifier l’entr√©e : DISABLE_AUTO_UPDATE=true

L’outil peut √™tre mis √† jour √† la demande via la commande omz update.

omz
Usage: omz <command> [options]

Available commands:

  help                Print this help message
  changelog           Print the changelog
  plugin <command>    Manage plugins
  pr     <command>    Manage Oh My Zsh Pull Requests
  theme  <command>    Manage themes
  update              Update Oh My Zsh

La plupart des plugins se contentent d’ajouter des commandes suppl√©mentaires pour faire des raccourcis ou d’activer l'auto-completion pour l’outil donn√©. Par exemple, le plugin kubectl cr√©√© tout un tas d’alias √† la commande :

k=kubectl
kaf='kubectl apply -f'
kca='_kca(){ kubectl "$@" --all-namespaces;  unset -f _kca; }; _kca'
kccc='kubectl config current-context'
kcdc='kubectl config delete-context'
kcgc='kubectl config get-contexts'
kcn='kubectl config set-context --current --namespace'
(...)

Dans tous les cas, si jamais vous avez besoin de plus d’informations, il suffit d’aller sur le repo de Oh My Zsh.

Enjoy !