Grégoire, membre de la communauté de blogueurs JobProd.
Les terminaux et les interfaces en lignes de commande existent depuis plusieurs dizaines d’années. Pourtant, eux aussi évoluent et se perfectionnent. Exemple avec zsh et son framework: oh-my-zsh.
Le shell est un élément fondamental des systèmes d’exploitation modernes. Il s’agit d’un programme particulier, destiné à communiquer avec le noyau de l’OS et à lancer d’autres applications.
Il peut se présenter sous forme graphique ou en ligne de commande (par abus de langage, le terme shell fait souvent référence au programme en ligne de commande).
Le shell facilite l’utilisation du système en fournissant un ensemble d’outils (les builtins) qui permettent à l’utilisateur de se déplacer dans l’arborescence des fichiers, ou de bénéficier de l’autocomplétion.
Il est également possible de créer des scripts shell (ou batch files sur les systèmes Microsoft), pour regrouper plusieurs instructions et les exécuter automatiquement à intervalles réguliers.*
Historiquement, la notion de shell est apparue avec le système d’exploitation Multics (en 1969), puis a été reprise par les concepteurs d’Unix, Dennis Ritchie et Ken Thompson. Depuis, le shell a évolué, au point qu’il en existe de
nombreuses implémentations, parfois incompatibles entre elles: sh, bash, czh, ksh et zsh, entre autres.
*En réalité, les shells sont des hybrides, mi-programme, mi-langage de programmation. Ce sont ces langages de programmation qui sont utilisés pour concevoir des scripts, à l’aide de structures de contrôle de flux notamment.
Zsh
Zsh est l’un des shells apparus les plus récemment (1990). Il améliore bash, le shell par défaut d’Unix et Linux, en particulier sur les points suivants:
- Rapidité d’exécution
- Complétion avancée (exécutables, options, noms de fichiers)
- Globbing (trouver des fichiers de manière récursive à l’aide de regexp)
- Configuration simplifiée
Ces améliorations ne sont pas spécifiques à zsh: il est ainsi possible de configurer bash pour qu’il fonctionne d’une façon très similaire à zsh.
Mais puisque ces fonctionnalités sont présentes nativement sous zsh (où plus simples à configurer), de nombreux utilisateurs préfèrent l’utiliser à la place de bash.
La configuration de zsh est définie dans un ensemble de fichiers, souvent placés dans le repertoire d’un utilisateur afin que celui-ci puisse y apporter les modifications qu’il souhaite sans affecter les autres utilisateurs du système.
Parmi ces fichiers, on trouve notamment:
.zprofile -> Utilisé pour les shells de type login.
.zshrc -> Utilisé pour les shells de type interactif.
Les shells de login sont souvent utilisés pour lancer des scripts en simulant l’arrivée d’un utilisateur sur le système. Ils contiennent donc des directives spécifiques, qui permettent par exemple d’arriver directement dans le répertoire d’un utilisateur.
Zsh est un outil très puissant. Pour s’en convaincre, il suffit de lire la première page de son imposant manuel:
« Because zsh contains many features, the zsh manual has been split into a number of sections: »
zsh Zsh overview (this section)
zshroadmap Informal introduction to the manual
zshmisc Anything not fitting into the other sections
zshexpn Zsh command and parameter expansion
zshparam Zsh parameters
zshoptions Zsh options
zshbuiltins Zsh built-in functions
zshzle Zsh command line editing
zshcompwid Zsh completion widgets
zshcompsys Zsh completion system
zshcompctl Zsh completion control
zshmodules Zsh loadable modules
zshcalsys Zsh built-in calendar functions
zshtcpsys Zsh built-in TCP functions
zshzftpsys Zsh built-in FTP client
zshcontrib Additional zsh functions and utilities
zshall Meta-man page containing all of the above
Bien évidemment, la majorité des utilisateurs ne souhaite pas forcément passer ses week-ends à éplucher le manuel de zsh pour en tirer tous ses bénéfices.
C’est pour cette raison qu’est né Oh-My-Zsh.
Je cherche un job dans lequel je me sens bien maintenant !Oh My Zsh
Oh My Zsh est une collection de plugins et d’astuces qui facilitent grandement la configuration et l’utilisation de zsh. Il s’agit d’un projet de Robby Russell, disponible sur Github:
https://github.com/robbyrussell/oh-my-zsh [2]
Une fois l’installation effectuée, il suffit de définir une liste de plugins à utiliser dans son fichier .zshrc, par exemple:
‘plugins=(autojump git /articles/tmux virtualenv virtualenvwrapper vi-mode)’
autojump -> plugin pour se déplacer dans une arborescence de fichiers.
git -> raccourcis et aide détaillée pour git.
/articles/tmux -> raccourcis pour /articles/tmux.
virtualenv / virtualenvwrapper -> gestion simplifée des virtualenvs python.
vi-mode -> raccourcis claviers de vim pour zsh.
La liste complète de plugins est disponible dans le répertoire ‘plugins’ sur Github. Elle contient à l’heure actuelle plusieurs dizaines de plugins, et il ya tout lieu de penser qu’elle va continuer de croître.
https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins [3]
En conclusion, Oh-My-Zsh permet d’exploiter toute la puissance de zsh, qui est lui même l’un des shells les plus performants à l’heure actuelle. Cette combinaison, simple et efficace, explique probablement pourquoi de nombreux développeurs utilisent ces outils. La transition depuis bash s’effectue sans accrocs, et zsh devient rapidement indispensable.
Liens:
http://www.zsh.org/ [1] https://github.com/robbyrussell/oh-my-zsh [2]
https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins [3]
Tout comme Grégoire, vous êtes un passionné de développement ?
Alors, que vous soyez simplement curieux de rencontrer des entreprises très techniques et humaines, ou à la recherche de belles opportunités, nous vous invitons à cliquer ci-dessous !
Grégoire Juge
Tombé dans la marmite Linux depuis quelques années déjà, je m’intéresse au mouvement open-source dans son ensemble. Techniquement, j’apprécie les systèmes légers et flexibles qui me permettent de focaliser mon attention sur l’essentiel.
A mes heures perdues j’aime également travailler sur des plate-formes de type Raspberry Pi ou OpenMoko, qui sont une passerelle idéale pour découvrir un autre domaine passionnant: l’électronique embarquée.
En savoir +