Je suis curieux de savoir pourquoi on voudrait lancer bash au lieu de zsh. Je veux dire que zsh est totalement rétro-compatible avec bash. Ne vous méprenez pas: je n'aime pas les bash ou quoi que ce soit. Je veux juste vraiment savoir s'il y a des avantages à l'utiliser par rapport à zsh.
Alors, quelle est la raison d'utiliser bash sur zsh?
Réponses:
Deux raisons me viennent à l’esprit:
Premièrement, il est disponible pratiquement partout. J'ai plusieurs systèmes Linux (CentOS 4.x dans ce cas) sur lesquels zsh n'est pas installé. De la même manière, je dois toucher d'anciens systèmes tels que Solaris 2.6 et versions ultérieures, HP-UX 10 et versions supérieures, ainsi que des versions similaires d'AIX. Par conséquent, je dois utiliser bash sur ces ordinateurs, ce que je fais parce que je touche des dizaines, voire des centaines, d’ordinateurs individuels au cours d’un mois, et afin d’obtenir une cohérence dans votre interface, vous finissez par être bloqué par la par défaut.
Deuxièmement, il est disponible pratiquement partout. Cela signifie que je peux écrire un script shell bash et être sûr à 99% qu'il fonctionnera s'il est transféré ailleurs.
Oui, ces raisons sont superficiellement les mêmes, mais leur raisonnement est différent.
la source
Bash vient généralement avec tous les systèmes, pas zsh. J'aime zsh, mais à cause de cela, j'utilise zsh pour un usage interactif, mais Bash pour tous mes scripts .
Je trouve que cela simplifie tout le processus, car même lorsque j’achète quelle que soit la bash compatible (setopt SH_WORD_SPLIT?), Je rencontre toujours des différences subtiles.
la source
zsh n'est pas totalement compatible bash. Il y a une variété de différences. Les nouveaux zsh sont plus compatibles avec bash (= ~ pris en charge, exec dispose maintenant des options de drapeau supplémentaires, etc.), mais la compatibilité totale n'est pas un objectif, même pas sous "émuler".
Par exemple, bash sous-chaîne est $ {foo: offset: len} mais en zsh, il s'agit de $ foo [début, fin] et ce n'est qu'un exemple simple.
zsh est un shell influencé par tcsh et ksh qui fait beaucoup de choses à sa manière; La compatibilité POSIX n’est pas explicitement un objectif, mais les développeurs réagissent aux correctifs qui ajoutent un comportement d’options / émulation qui rapprochent les choses de POSIX. Mais lorsque vous commencez vraiment à vous imprégner de la puissance du shell, vous commencez à créer des scripts en écriture seule, plus encore que bash.
bash est POSIX sh + ksh + pedanticism, avec certaines fonctionnalités maintenant copiées à partir de zsh. Il a aussi des scripts en écriture seulement mais comme il a des opérateurs moins puissants, vous finissez par ne pas utiliser la concision de zsh et les choses pourraient être plus lisibles (à l'exception de tous les guillemets pour éviter la séparation des espaces, le stupide tableau $ ksh-style signifie d'abord -element-of-array, pas tous les éléments-of-array, etc etc).
Il est déconseillé d’écrire des scripts qui tirent pleinement parti de la puissance de l’un ou de l’autre shell, sauf dans un environnement contraint (par exemple, l’écriture de scripts système rc, où certains systèmes de fichiers ne sont peut-être pas montés, etc.). En tant qu’idéal, utilisez Perl / Python / Ruby / any pour tout ce qui est assez gros pour que vous ayez besoin de l’expressivité, pas dans Bourne sh, si vous voulez que les autres puissent le maintenir. Conservez le contenu du shell pour les éléments relatifs au shell interactif (programmation de complétion par onglet, etc.).
Je n'utiliserais pas bash sur zsh. J'utilisais nu sh sur zsh pour des scripts simples, ou je passais dans un langage où les tableaux associatifs avaient des opérateurs décents (contrairement à zsh, où ils sont, encore une fois, "concis"). Je pourrais passer d'un script sh à bash si j'ai besoin de cette petite fonctionnalité pour étendre un script existant qui a fait ses preuves et si je n'ai pas le temps de le réécrire maintenant.
la source
Mon conseil: si vous optez pour la portabilité absolue, écrivez en utilisant les règles du shell Bourne, ne vous embêtez même pas avec les extensions du shell Korn. Comme mentionné, ce sont quelques "grandes boîtes" plus anciennes qui ne portent pas du tout de shell GNU.
Bash en fait déjà "trop". J'ai un ami au travail qui préfère le zsh, mais je ne sais pas ce que ça fait exactement.
Quoi qu’il en soit, écrivez pour le shell Bourne (ou "Bourne again") ou alternativement, si vous créez un script personnalisé pour un petit nombre de boîtes spécifiques, ignorez entièrement "l’enfer de shell" et écrivez simplement avec perl ou python (ou autre chose). votre interprète préféré installé localement est).
la source
En plus de la raison de la portabilité donnée ci-dessus, une autre pourrait être que bash ajoute encore des fonctionnalités.
Par exemple, bash v4.x + introduit:
globbing récursif:
autocd:
la source
Absurdité. Si vous savez que tous les systèmes qui vous intéressent ont BASH, alors c'est une déclaration parfaitement raisonnable. BASH possède de nombreuses fonctionnalités utiles qui ne peuvent être raisonnablement imitées dans POSIX sh. L'utilisation frivole de fonctionnalités non-POSIX n'est pas une bonne idée, mais les utiliser lorsque vous en avez réellement besoin est acceptable.
La portabilité n'est pas un absolu. On peut se demander dans quelle mesure il faut aller jusqu'au bout, comme n'importe quoi d'autre. Par exemple, Fedora utilise des commandes shell pour créer des packages RPM et les instructions relatives à l’emballage de Fedora stipulent que, comme tous les packages doivent être créés de manière native sur Fedora, il est correct d’utiliser toutes les fonctionnalités de BASH. Même si, théoriquement, d'autres distributions sans BASH pourraient vouloir réutiliser leurs RPM sources, ils ont pris une décision concernant la portabilité en fonction de l'aspect pratique à la place de votre mantra "TOUJOURS UZE POSIX !! 1".
ZSH n'a pas été retenu comme un shell par défaut, simplement parce que c'est un fouillis tentaculaire d'idées à moitié cuites.
la source
En passant, on vous a dit à maintes reprises qu’on le
bash
trouve pratiquement partout, alors utilisez-le pour écrire des scripts portables, ce qui est faux .La bonne façon d'écrire des scripts unix portables consiste à utiliser
sh
, ce qui se trouve dans tous les systèmes * nix .Tous les autres shell n’est
sh
qu’un outil interactif quotidien.Lorsque vous arrivez sur
bash
vszsh
-bash
est regroupé dans plus*nixes
dezsh
, vous devez donc en assurer la maintenance. Certaines personnes aiment les "fonctionnalités intéressantes" de zsh, alors elles aiment payer ce prix, d'autres non.la source
sh
est bash, il active le mode de compatibilité lorsqu'il est exécuté en tant quesh
.Un autre point:
De nombreux programmes fournissent par défaut une finition cool. Pour moi c'est la raison pour ne pas changer.
[ajouté en juil. 2013] Eh bien, après quelques années d'utilisation de zsh depuis le commentaire ci-dessus, je dois dire que la complétion des onglets (même si elle est intégrée, sans modifications de 3ème paret) est brillante et semble aller bien au-delà de celle proposée par bash . :)
la source