Y a-t-il une raison d'utiliser bash sur zsh? [fermé]

33

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?

Jason Baker
la source
2
Je voulais juste souligner que ZSH n’est pas totalement compatible avec BASH. Dans ZSH, l'indexation d'un tableau commence à 1 - dans BASH, l'indexation d'un tableau commence à 0. Il existe également d'autres différences, mais je voulais le signaler.
Charles Addis

Réponses:

29

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.

David Mackintosh
la source
2
Je me souviens d’avoir ksh88 / ksh93 sur HPUX, nous n’avons jamais eu accès à l’installation de bash.
Zlemini
24

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.

Kyle Brandt
la source
3
Ce serait tous les systèmes GNU / Linux que vous voulez dire?
Andol
2
Eh bien, j'ai trouvé qu'il est livré avec OS / X et bsd, je n'ai pas beaucoup d'expérience avec les autres * nix, est-ce qu'ils (les versions récentes) n'ont pas d'habitude bash?
Kyle Brandt
1
Les versions antérieures de Solaris n'incluaient pas bash; Généralement, je devais compter sur Bourne comme shell pour les scripts. Cela n'a pas été le cas pendant un certain temps, mais vous pouvez toujours le rencontrer dans certaines grandes entreprises.
user5336
3
Doit être différent BSD: s alors. Au moins dans OpenBSD et dans FreeBSD, vous devez installer bash séparément des ports / packages.
andol
andol: Ce sont ceux que j'avais l'habitude d'utiliser. Je dois me souvenir de façon incorrecte, ou je l'ai fait et je ne m'en souviens pas.
Kyle Brandt
13

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.

Phil P
la source
6
nb: $ {foo: offset: len} est maintenant supporté par zsh, pour des raisons de compatibilité.
Phil P
6

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).

Roboprog
la source
5

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:

    rm -f ** / *. log

  • autocd:

    Tapez "/ tmp" au lieu de "cd / tmp"

cavalcade
la source
2
En quoi bash copie des fonctionnalités de zsh est-il une raison pour utiliser bash?
qqx
5

En passant, on vous a dit à maintes reprises que bash se trouvait pratiquement partout, utilisez-le pour écrire des scripts portables, ce qui est faux.

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.

Craig
la source
2
Pouvez-vous expliquer quelles caractéristiques ou idées de zsh vous trouvez à moitié cuites et pourquoi?
funroll
2

En passant, on vous a dit à maintes reprises qu’on le bashtrouve 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 shqu’un outil interactif quotidien.

Lorsque vous arrivez sur bashvs zsh- bashest regroupé dans plus *nixesde zsh, 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.

Samat
la source
2
De nombreuses implémentations modernes de sh ne sont que des liens vers bash.
user9517 prend en charge GoFundMonica
2
@Iain Ubuntu utilise dash par défaut, et même s'il shest bash, il active le mode de compatibilité lorsqu'il est exécuté en tant que sh.
mgorven
2

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 . :)

Wojciech Kaczmarek
la source
3
Je pense que cela fonctionne aussi avec ZSH, avec la complétion d'onglets dans ZSH, je reçois beaucoup d'arguments spécifiques au programme ...
Kyle Brandt
Intéressant. Voulez-vous dire que les fichiers d'achèvement de bash fonctionnent avec zsh, ou que certains programmes ont leur fonction d'achèvement spécifique à zsh? Il y a tout de même une mise en page standard des fichiers d'achèvement de bash que zsh peut ou non considérer automatiquement. Avez-vous modifié votre configuration zsh pour la faire fonctionner?
Wojciech Kaczmarek
@Wojciech Kaczmarek: Je pense que vous voulez le 19.3 parmi les suivants: zsh.sourceforge.net/Doc/Release/zsh_19.html . Honnêtement, je n'ai jamais pris le temps de bien le comprendre, je viens de déchirer un .zshrc que j'ai trouvé en ligne :-) Mais cela complétera les arguments en ligne de commande de programmes comme apt, grep, etc.
Kyle Brandt
5
La complétion par tabulation de bash est très similaire à l'ancien système de complétion par tabulation de zsh. C’est l’une des idées copiées de zsh vers bash (il en existe d’autres copiées de bash à zsh). Vous pouvez utiliser des scripts de complétion écrits pour bash en zsh, en exécutant "bashcompinit" puis en utilisant les commandes "complete" et / ou "compgen" de zsh. Cette opération est possible car la fonctionnalité bash est un sous-ensemble de celle disponible dans zsh et alors peut être imité. Il n’ya donc aucune raison de passer à bash car une commande est livrée avec un achèvement de bash.
Phil P