Déplacement vers zsh

Nov 28, 2021
admin

Apple a annoncé que dans macOS 10.15 Catalina, le shell par défaut sera zsh.

Dans cette série, je vais documenter mes expériences de déplacement des paramètres, des configurations et des scripts bash vers zsh.

  • Partie 1 : Passage à zsh (cet article)
  • Partie 2 : Fichiers de configuration
  • Partie 3 : Options du shell
  • Partie 4 : Alias et fonctions
  • Partie 5 : Compléments
  • Partie 6 : Personnalisation de l’invite zsh
  • Partie 7 : Miscellanea
  • Partie 8 : Scripting zsh

zsh (je crois que cela se prononce zee-shell, bien que zish soit amusant à dire) succédera à bash comme shell par défaut. bash est l’interpréteur de commandes par défaut depuis Mac OS X 10.3 Panther.

Cette série s’est transformée en un livre : retravaillé et étendu avec plus de détails et de sujets. Comme mes autres livres, je prévois de le mettre à jour et de l’enrichir également après la sortie de la version, pour qu’il reste pertinent et utile. Vous pouvez le commander sur l’Apple Books Store dès maintenant.

Pourquoi ?

Le binaire bash fourni avec macOS est bloqué sur la version 3.2 depuis longtemps maintenant. La bash v4 a été publiée en 2009 et la bash v5 en janvier 2019. La raison pour laquelle Apple n’a pas basculé vers ces versions plus récentes est qu’elles sont sous licence GPL v3. bash v3 est toujours sous GPL v2.

zsh, d’autre part, a une licence  » de type MIT « , ce qui la rend beaucoup plus acceptable pour Apple de l’inclure dans le système par défaut. zsh est disponible en tant que sur macOS depuis longtemps. La version zsh sur macOS 10.14 Mojave est assez récente (5.3). macOS 10.15 Catalina a la version actuelle zsh 5.7.1.

Is bash gone!?

No.

macOS Catalina a toujours la même /bin/bash (version 3.2.57) que Mojave et les versions antérieures de macOS. Ce changement concerne uniquement les nouveaux comptes créés sur macOS Catalina. Lorsque vous mettez à niveau vers Catalina, le shell par défaut d’un utilisateur restera ce qu’il était auparavant.

De nombreux scripts dans macOS, les systèmes de gestion et les installateurs Apple et tiers s’appuient sur /bin/bash. Si Apple a simplement arraché ce binaire dans macOS 10.15 Catalina ou même 10.16. De nombreux installateurs et autres solutions se briseraient et cesseraient tout simplement de fonctionner.

Les utilisateurs qui ont /bin/bash comme shell par défaut sur Catalina verront une invite au début de chaque session de Terminal indiquant que zsh est maintenant le shell par défaut recommandé. Si vous souhaitez continuer à utiliser /bin/bash, vous pouvez supprimer ce message en définissant une variable d’environnement dans votre .bash_profile ou .bashrc.

export BASH_SILENCE_DEPRECATION_WARNING=1

Vous pouvez également télécharger et installer vous-même une version plus récente de bash. Gardez à l’esprit que les installations personnalisées de bash résident dans un répertoire différent, généralement /usr/local/bin/bash.

Besh restera-t-il indéfiniment ?

Apple vous conseille fortement de changer de shell. Ceci est différent du dernier changement dans Mac OS X 10.3 Panther, quand Apple a changé le défaut à bash, mais ne s’est pas vraiment soucié si vous êtes resté sur tcsh. En fait, tcsh est toujours présent sur macOS.

La messagerie d’Apple devrait nous dire, que les jours de /bin/bash sont comptés. Probablement pas très vite, mais éventuellement, garder une version de bash vieille de plus de dix ans sur le système deviendra un handicap. Le bash intégré a dû être patché en 2014 pour atténuer la vulnérabilité  » Shellshock « . À un moment donné, Apple considérera que le coût de la maintenance continue est trop élevé.

Un autre indice est qu’un nouveau shell est apparu sur macOS Catalina (et est mentionné dans l’article de support). Le ‘shell Debian Almquist’ dash a été ajouté à la gamme de shells. dash est conçu pour être une implémentation minimale du shell standard Posix sh. Jusqu’à présent, dans macOS (y compris Catalina),sh invoque bash en mode de compatibilité sh.

Comme le mentionne l’article de support d’Apple, Catalina ajoute également un nouveau mécanisme permettant aux utilisateurs et aux admins de changer le shell qui gère les invocations sh. Les MacAdmins ou les utilisateurs peuvent modifier le lien symbolique stocké dans /var/select/sh pour pointer vers un shell autre que /bin/bash. Cela change le shell qui interprète les scripts le shebang #!/bin/sh ou les scripts invoqués avec sh -c. Changer l’interpréteur pour sh ne devrait pas, mais peut changer le comportement de plusieurs scripts cruciaux dans le système, les outils de gestion, et dans les installateurs, mais peut être très utile à des fins de test.

Tous ces changements sont des indicateurs qu’Apple se prépare à supprimer /bin/bash à un moment, encore indéterminé, dans le futur.

Dois-je attendre que Catalina passe à zsh ?

Non, zshest disponible Mojave et sur les versions plus anciennes de macOS. Vous pouvez commencer à tester zsh ou même changer votre shell par défaut déjà.

Si vous voulez juste voir comment zsh fonctionne, vous pouvez simplement ouvrir Terminal et taper zsh:

$ zshMacBook%

Le principal changement que vous verrez est que l’invite semble différente. zsh utilise le caractère % comme invite par défaut. (Vous pouvez le changer, bien sûr.) La plupart des frappes de navigation et autres comportements resteront les mêmes que dans bash.

Si vous voulez déjà changer votre shell par défaut pour zsh, vous pouvez utiliser la commande chsh:

$ chsh -s /bin/zsh

Ceci vous demandera votre mot de passe. Cette commande ne changera pas le shell actuel, mais tous les nouveaux, donc fermez les fenêtres et les onglets actuels du Terminal et ouvrez-en un nouveau.

En quoi zsh est-il différent ?

Comme bash (‘Bourne again shell’ ), zshdérive de la famille des shells ‘Bourne’. En raison de cette ascendance commune, il se comporte de manière très similaire dans l’utilisation quotidienne. Le changement le plus évident sera le prompt différent.

La principale différence entre bash et zsh est la configuration. Puisque zsh ignore les fichiers de configuration de bash (.bash_profile ou .bashrc), vous ne pouvez pas simplement copier les paramètres personnalisés de bash sur zsh. zsh a beaucoup plus d’options et de points pour modifier la configuration et le comportement de zsh. Il existe tout un écosystème d’outils de configuration et de thèmes appelé oh-my-zsh qui est très populaire.

zsh offre également une meilleure configuration pour l’autocomplétion qui est beaucoup plus facile que dans bash.

Je prévois un post séparé, décrivant comment transférer (et traduire) vos configurations de bash à zsh.

Qu’en est-il des scripts ?

Puisque zsh est présent sur macOS depuis longtemps, vous pourriez commencer à déplacer vos scripts de bash à zsh tout de suite et ne pas perdre la rétrocompatibilité. Rappelez-vous simplement de définir le shebang dans vos scripts à #!/bin/zsh.

Vous gagnerez certaines fonctionnalités où zsh est supérieur à bash v3, comme les tableaux et les tableaux associatifs (dictionnaires).

Il y a une exception où je recommanderais maintenant d’utiliser /bin/sh pour vos scripts : le système Recovery ne contient pas le shell /bin/zsh, même sur la bêta de Catalina. Cela pourrait encore changer pendant la phase bêta, ou même plus tard, mais alors vous devez toujours considérer les anciennes installations macOS où zsh n’est définitivement pas présent dans Recovery.

Lorsque vous prévoyez d’utiliser vos scripts ou pkgs avec des scripts d’installation dans un contexte de Recovery (ou NetInstall, ou lecteur USB amorçable), comme Twocanoes MDS, installr ou bootstrappr, alors vous ne pouvez pas compter sur /bin/zsh.

Puisque nous savons maintenant que bash finira par disparaître, le seul choix commun restant est /bin/sh.

Lorsque vous construisez un paquet d’installation, il peut être difficile d’anticiper tous les contextes dans lesquels il pourrait être déployé. Donc, pour les scripts d’installation pré- et post-installation, je recommanderais d’utiliser /bin/sh comme shebang à partir de maintenant.

J’avais l’habitude de recommander d’utiliser /bin/bash pour tout ce qui concerne MacAdmin. /bin/sh est définitivement un pas en arrière dans la fonctionnalité, mais il semble être le choix le plus sûr pour un support continu.

Summary

Dans l’ensemble, alors que le message d’Apple est très intéressant, le changement lui-même est moins dramatique que les gros titres. Apple ne  » remplace  » pas bash par zsh, du moins pas encore. Dans l’ensemble, nous devrons repenser et réapprendre certaines choses, mais il y a aussi beaucoup à gagner en passant enfin d’un shell vieux de dix ans à un nouveau shell moderne !

Suivant

Dans la prochaine partie, nous examinerons les fichiers de configuration de zsh.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.