web-dev-qa-db-fra.com

Y a-t-il une raison d'utiliser Bash sur ZSH?

Je suis curieux de savoir pourquoi on voudrait courir Bash au lieu de ZSH. Je veux dire que ZSH est entièrement compatible avec BASH. Ne me trompe pas: je n'aime pas négliger Bash ni quoi que ce soit. Je veux véritablement savoir s'il y a des avantages à l'utiliser sur ZSH.

Alors, quelle raison est-il là pour utiliser Bash sur ZSH?

33
Jason Baker

Deux raisons viennent à l'esprit:

Tout d'abord, il est disponible pratiquement partout. J'ai plusieurs systèmes Linux (Centos 4.x dans ce cas) qui n'ont pas installé ZSH. De même, je dois toucher des systèmes anciens tels que Solaris 2.6 et UP, HP-UX 10 et plus, et des versions similaires de AIX. Par conséquent, j'ai à peu près beaucoup d'utiliser bash sur ces ordinateurs, que je fais parce que je touche des dizaines, voire des centaines, d'ordinateurs individuels au cours d'un mois et pour obtenir la cohérence de votre interface, vous finissez par être bloquée en utilisant le Par défaut.

Deuxièmement, il est disponible pratiquement partout. Cela signifie que je peux écrire un script Bash Shell et être sûr de 99% qu'il fonctionnera lorsqu'il sera transféré ailleurs.

Oui, ces raisons sont superficiellement les mêmes, mais le raisonnement derrière eux est différent.

29
David Mackintosh

Bash vient généralement avec chaque système, ZSH ne le fait pas. J'adore Zsh, mais à cause de cela, j'utilise ZSH pour une utilisation interactive, mais bash pour tous mes scripts.

Je trouve que cela garde tout plus simple, car même lorsque j'éteigne quelle que soit la compatible Bash (setopt sh_word_split?), Je rencontre toujours des différences subtiles.

24
Kyle Brandt

zSH n'est pas entièrement compatible. Il existe une variété de différences. New ZSH est plus compatible avec Bash (= ~ prise en charge, EXEC propose désormais les options d'indicateur supplémentaires, etc.) mais la compatibilité complète n'est pas un objectif, pas même sous "émuler".

Par exemple, Bash Subring est $ {FOO: Décalage: LEN} mais dans ZSH c'est $ FOO [Démarrer, terminer] et ce n'est qu'un exemple simple.

zSH est une coquille influencée par TCSH et KSH qui fait de nombreuses choses sa propre manière; La compatibilité POSIX n'est explicitement pas un objectif, mais les développeurs répondent aux correctifs qui ajoutent des options/émulser le comportement qui se rapprochent des choses de POSIX. Mais lorsque vous commencez à entrer dans la puissance de la coquille, vous commencez à créer des scripts en écriture, plus que même que Bash.

bash est POSIX SH + KSH + PEDANTANTINISME, avec certaines fonctionnalités copiées de ZSH. Il a aussi des scripts en écriture uniquement, mais parce qu'il a des opérateurs moins puissants, vous n'utilisez pas la concision de zsh et de choses pourrait être plus lisible (sauf pour tout ce que la citation visant à éviter les espaces blancheurs. stupide Tableau de style KSH signifie le premier élément de tableau, pas tous les éléments-de-tableau, etc., etc.).

Les scripts d'écriture qui profitent pleinement de la puissance de l'une des coquilles est imprudent, sauf si vous êtes dans un environnement contraint (par exemple, des scripts RC de système d'écriture, où certains FSS ne peuvent pas être montés, etc.). En tant qu'idéal, utilisez Perl/Python/Ruby/Peu importe pour tout ce qui est assez grand que vous avez besoin de l'expressivité non à Bourne Sh, si vous voulez que les autres puissent le maintenir. Gardez les éléments de la coquille pour les choses relatives à la coque interactive (programmation d'achèvement de l'onglet, etc.).

Je n'utiliserais pas Bash sur ZSH. J'utiliserais Bare SH sur ZSH pour des scripts simples ou passez à une langue dans laquelle des tableaux associatifs ont des opérateurs décents (contrairement à ZSH, où ils sont encore "concis"). I PEUVENT Switch Un script sh à bash si j'ai besoin d'un peu de fonctionnalité pour prolonger un script éprouvé existant et n'a pas le temps de le réécrire maintenant.

13
Phil P

Mon conseil: Si vous allez pour une portabilité absolue, écrivez à l'aide de règles de Bourne Shell, ne vous embêtez même pas avec les extensions de Korn Shell. Comme mentionné, qui sont des "grandes boîtes" plus anciennes autour de cela n'ont pas GNU coquillages sur eux du tout.

Bash fait déjà "trop". J'ai un ami au travail qui préfère ZSH, mais je ne sais pas ce que cela fait exactement.

Quoi qu'il en soit, écrivez-vous pour Bourne (ou "Bourne à nouveau") Shell, ou alternativement, si vous faites un script personnalisé pour un petit nombre de boîtes spécifiques, ignorez entièrement "Shell Hell" et simplement écrire en utilisant Perl ou python (ou quel que soit votre interpréteur installé localement préféré).

6
Roboprog

À propos, on vous a dit ici plusieurs fois que Bash se trouve pratiquement partout, utilisez-le pour écrire des scripts portables, ce qui est faux.

Absurdité. Si vous savez que chaque système que vous vous souciez de BASH, c'est une déclaration parfaitement raisonnable. Bash a de nombreuses fonctionnalités utiles qui ne peuvent pas être raisonnablement émulées dans Posix Sh. L'utilisation frivole de fonctionnalités non posix n'est pas une bonne idée, mais utilisez-les lorsque vous avez vraiment besoin d'eux, c'est bien.

La portabilité n'est pas un absolu. C'est discutable à quelle distance vous devez le prendre, tout comme une autre chose. Par exemple, Fedora utilise des commandes Shell pour la construction de packages RPM et les lignes directrices de l'emballage de Fedora indiquent que, puisque tous les colis doivent être construits de manière natale sur Fedora, il convient d'utiliser toutes les caractéristiques de Bash. Même si théoriquement d'autres distributions sans bash peuvent vouloir réutiliser leurs RPM source, ils ont pris une décision concernant la portabilité basée sur la pratique au lieu de votre mantra "Toujours Uze Posix !! 1".

ZSH n'a pas attrapé une coquille par défaut, simplement parce que c'est un gâchis étendu d'idées à moitié cuites.

5
Craig

En plus de la raison de la portabilité indiquée ci-dessus, une autre pourrait être que Bash ajoute toujours des fonctionnalités.

Par exemple Bash v4.x + introduit:

  • globbing récursif:

    rm -f **/*. LOG

  • autocd:

    Tapez "/ TMP" au lieu de "CD/TMP"

5
cavalcade

Au fait, on vous a dit ici plusieurs fois que bash se trouve pratiquement partout, utilisez-le pour écrire des scripts portables, qui est faux.

La bonne façon d'écrire des scripts unix portables est d'utiliser sh, qui se trouve dans chaque système * NIX.

Toute autre coque sauf sh est juste un outil interactif quotidien de la vôtre.

Lorsque vous arrivez à bash vs zsh - bash est groupé dans plus de *nixes _ zsh, donc ici vient des inconvénients de l'installation de logiciels supplémentaires au système - vous devez le maintenir. Certaines personnes adorent les "fonctionnalités cool" de ZSH afin qu'ils aiment payer ce prix, certains pas.

2
Samat

Un autre point:

De nombreux programmes fournissent une achèvement de Bash Cool par défaut. Pour moi, c'est la raison de ne pas changer.

[AJOUT ajouté à juil 2013] Bien après quelques années d'utilisation de ZSH depuis le commentaire ci-dessus, je dois dire que l'onglet achèvement (même encastré, sans modification de 3e-panserety) est brillant et on dirait que c'est bien au-delà de celui proposé par Bash . :).

2
Wojciech Kaczmarek