salut Steve, On Thu, Oct 08, 2020 at 11:35:44AM +0200, steve wrote: > J'ai des dizaine de script écrits en Bash. Existe-t-il un moyen > automatique de les porter sous Zsh?
il n'y a pas de de tanspiler bash vers zsh. par contre zsh et bash ont un gros tronc commun qui est la syntaxe ksh (et il me semble qu'il y a des options de compatibilité bash dans zsh) et ksh n'est qu'une évolution du bourne shell (sh) dont dash est l'implémentation qui fait consensus aujourd'hui. Donc a priori, j'aimerais te dire qu'il suffit de prendre ton script bash, de modifier le shebang et de voir ce qui casse...sauf que si t'as un rm (ou autre commande avec de possibles forts effets de bord), tu risques de faire des degats avec des incompatibilités qui amènent eventuellement a avoir un comportement très loin de ce qui est attendu. Voici donc des idées de filets pour sécuriser un peu ta démarche: 0. se renseigner sur les bashisms et voir ce que zsh propose à la place eventuellement identifier les bashisms automatiquement ? http://manpages.ubuntu.com/manpages/bionic/man1/checkbashisms.1.html 1. fais tout ca depuis un container debootstrap + ( chroot | lxroot ) , docker, ... il a plétore de solutions. j'aurais tendance a faire une copie du container apres installation histoire de pouvoir d'un container preinstallé si besoin. 2. change le shebang sed -i.bak 1s,$(which bash),$(which zsh), la liste de tes scripts 3. relance tes tests pour voir si tout se passe bien si tout se passe bien: c'est fini :) tu peux changer les shebangs partout 4. si tu as/veux plus erreurs ben il faut lire et corriger. je dis "tu veux plus d'erreur" parce que il faut savoir que les pires erreurs sont celles qui arrivent tardivement. aussi je te conseille d'ajouter ces lignes dans ton ~/.zshenv: setopt warncreateglobal nounset pipefail 5. corriger tu as 2 stratégies possibles: * virer les bashims et te rapprocher de la norme POSIX (du coup tu pourrais meme tenter de rendre ton script compatible avec mksh ou dash) * remplacer les bashisms par des zshisms ... c'est vraiment très plaisant et puissant mais ca nécessite zsh (et des collègues qui adhèrent à l'idée). tu vas te retrouver dans la meme situation que perl vs python: d'un coté un truc puissant que "personne ne peut lire" (en gros: pas le temps de lire la doc) et d'un autre survendu comme "la référence" et "super lisible". exemple: en zsh tu peux écrire dpkg -S $( readlink -f $(which vi) ) avec l'habitude tu vas plutôt écrire dpkg -S =vi(:A) mais tu risques de te faire pourrir par les collègues Aussi: apres 25 ans de shell scripting, je me rend compte que la puissance de zsh m'a fait passé à coté de l'élégance de commandes comme bc, mkfifo, xargs, ... aussi j'ai tendance maintenant à écrire des scripts avec des shells beaucoup plus légers (rc a ma préférence mais il y a aussi dash et mksh). cordialement, marc