web-dev-qa-db-fra.com

Quelles sont les différences fondamentales entre les coquillages ordinaires * Nix?

Quelles sont les différences fondamentales entre les coquilles traditionnelles * Nix et quels scénarios pourraient vous inviter à utiliser un sur l'autre? Je comprends que certaines d'entre elles s'opposent probablement à la préférence des utilisateurs, mais je n'ai jamais utilisé à Bash et je suis intéressé d'entendre où une autre coquille pourrait être utile.

En outre, il y a également un impact sur les scripts de shell écrits par l'utilisateur lorsqu'il est exécuté sous une coquille ou une autre ou est-ce simplement une question de changement de coquille en haut du fichier? Mon instinct dit que ce n'est pas si facile.

52
conorgriffin

Pour une utilisation interactive, il existe deux prétendants principaux, Bash et ZSH , plus le straggler TCSH et le nouveau venu poisson .

  • Bash est la coquille officielle du GNU et la coquille par défaut sur la plupart des distributions Linux. Sur d'autres unes qui n'expévent pas d'une coque interactive décente dans le cadre de l'installation de base, je pense à Bash Ce que les gens ont tendance à choisir, dans une auto-renforcement ", Bash est partout, je vais l'utiliser aussi" en boucle. Voir aussi Pourquoi Bash est-il partout? (avec beaucoup d'informations historiques).

  • ZSH a presque toutes les caractéristiques de Bash et de nombreuses autres (utiles!). Son inconvénient principal est moins connu, ce qui signifie que, comme une question pratique, vous êtes moins susceptible de trouver qu'il est déjà installé sur un système quelqu'un d'autre créé et il y a moins de documentation tierce à ce sujet. Voir aussi Quelles fonctionnalités ZSH utilisez-vous? , Quelles fonctionnalités sont dans ZSH et manquantes de Bash, ou inversement? .

  • TCSH était une fois (jusqu'au début des années 90) la coquille avec les meilleures caractéristiques interactives, comme son prédécesseur CSH. Cela a rendu populaire pour une utilisation interactive (mais non pour script ). ZSH a rattrapé avec TCSH et s'est rapidement rapidement amélioré, et Bash a rattrapé (avec une achèvement programmable) au début des années 2000, tandis que TCSH a à peine progressé au cours des 15 dernières années. Par conséquent, il y a peu de raisons d'apprendre TCSH maintenant.

  • Le poisson essaie d'être plus propre que ses prédécesseurs. Il a des fonctionnalités soignées (syntaxe plus simple, coloration de la syntaxe sur la ligne de commande) mais manque d'autres (tout ce que l'auteur n'aime pas). La communauté de la pêche est beaucoup plus petite que même les ZSH, rendant les effets encore plus graves.


Pour les scripts, il existe plusieurs langues que vous pourriez vouloir cibler, en fonction de la manière dont vous souhaitez que vos scripts soient.

  • Tout ce qui prétend être unix-comme unix a un Bourne - shell dérivé comme /bin/sh. Il y a encore des unités commerciales autour de l'endroit où /bin/sh N'est pas POSIX Conforme.

  • Presque chaque fois-en-courant Unix a un sh exécutable qui est au moins conforme à au moins POSIX.2-1992 et généralement au moins POSIX: 2001 A.K.A. unique UNIX V . Ce shell peut vivre dans un répertoire différent tel que /usr/bin/posix Ou /usr/xpg6/bin. Les couches d'émulation POSIX existent également pour presque tous les systèmes qui sont suffisamment puissants pour le soutenir, ce qui en fait une cible attrayante.

  • De nombreux systèmes UNIX ont ksh9 , qui apporte certaines fonctionnalités très utiles que POSIX SH manque de (réseaux, réseaux associatifs, globs étendus (*(foo), @(foo|bar), ...) , NULL GLOBS (~(N)foo*), ...). =Ksh était un logiciel initialement commercial (il est devenu libre en 2000, après que certaines habitudes soient définies), et de nombreux assignations libres (Linux, * BSD) ont pris l'habitude de fournir un clone libre beaucoup plus ancien (- PDKSH ) manque de nombreuses fonctionnalités utiles. PDKSH est maintenant déplacé par mksh en dehors de OpenBSD, mais même MKSH incombe à la mise en œuvre de toutes les fonctionnalités KSH93. Aujourd'hui, tu peux 't comptez sur ksh93 étant disponible partout, surtout sur Linux où Bash est la norme.

  • Bash est toujours disponible sur Linux (à l'exception des variantes incorporées) et souvent sur d'autres non-unes. Il possède la plupart des fonctionnalités utiles de KSH93, bien que parfois avec une syntaxe différente.

  • ZSH a la plupart des fonctionnalités utiles de KSH93 et ​​de Bash. Sa syntaxe principale est plus propre mais incompatible avec Bourne. Sauf pour les macos, ne comptez pas sur ZSH étant disponible sur un système que vous n'avez pas installé.

  • Pour plus de script avancé, vous pouvez vous tourner vers Perl ou Python . Ces langues disposent de structures de données appropriées, de fonctionnalités de manipulation de texte décent, de combinaison de processus décents et de mécanismes de communication et de tonnes de bibliothèques disponibles. La plupart des systèmes UNIX les ont, soit regroupés avec le système d'exploitation, soit installé par l'administrateur (car il y a tellement de Perl et Python Scripts là-bas qu'il s'agit d'un système rare qui n'a pas d'au moins une de chaque).

Il existe deux saveurs de base de Shell, SH (par exemple, Bash) et CSH (par exemple, TCSH). Pour une utilisation interactive, il s'agit principalement de ce que vous êtes habitué. J'ai utilisé CSH, puis TCSH, pendant des années et qu'il serait douloureux de changer, juste parce que je suis tellement habitué à cela. J'ai aussi utilisé Bash et je ne pense pas qu'il y ait des raisons impérieuses de changer. Sauf peut-être que si l'un ou l'autre n'est pas disponible sur des machines que vous utilisez régulièrement.

Pour la programmation, la syntaxe est différente. Vous ne pouvez pas simplement changer la coquille, mais devez également modifier la syntaxe du script. Pour script, vous voulez utiliser SH ou BASH. La syntaxe est beaucoup plus prépénable à la script, comme expliqué ici (grâce à Riccardo Murri pour le lien. C'est un bon guide sur Bash Scripting .

Si vous n'avez pas décidé d'une coquille et que vous vous attendez à écrire des scripts, j'utiliserais Bash pour réduire le nombre de choses que vous devez apprendre.

27
KeithB

De retour dans les vieux jours, lorsque AT & T a inventé UNIX, il y avait Bourne Shell, écrit par Steve Bourne. C'était assez basique et manquait de nombreux outils que nous prenons pour acquis de nos jours.

AT & T n'était pas vraiment dans l'affaire Unix, donc à ce moment-là, le système d'exploitation très basique a été adopté quelque peu par Berkellely et ils ont apporté des changements dans BSD UNIX. Parmi de nombreux changements, était une nouvelle coquille, appelée CSH, qui a eu beaucoup d'améliorations sur SH, y compris le contrôle de la tâche, une meilleure utilisation interactive et ainsi de suite. Malheureusement, ils ont décidé que la syntaxe de programmation SH a sucé et crée leur propre, (un peu mal) copié des styles de codage C. (Un rant classique est http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/ ) Il y avait donc deux syntaxes.

Plus tard, ils ont apporté des améliorations à la CSH ajoutant l'ajout de l'onglet et d'autres choses. Cela est devenu TCSH, et si vous utilisez CSH, c'est probablement celui que vous utilisez.

AT & T a décidé que ce n'était pas totalement sorti de l'entreprise Unix, et ils l'ont polie aussi. David Korn (gentil gars) a créé la coquille Korn. Sur la base de l'idée d'étendre la syntaxe de Bourne Shell, il a ajouté beaucoup de choses pour les programmeurs et l'utilisation interactive. Il y a en fait quelques versions, et vous pouvez rarement voir des choses comme KSH88 et KSH93, dénotant les variantes.

Puis est venu FSF et le GNU OS. Ils souhaitaient créer leur propre système d'exploitation compatible UNIX nommé The Hurd et voulaient une meilleure coquille pour cela. Ils ont appelé Bash, pour Bourne Règles de Bourne. Règles de Posix est venu juste autour de cette époque, et ils voulaient faire le Shell Posix. Ils ont regardé autour de lui, prenant la syntaxe de la coquille de Bourne et des améliorations de Korn Shell , plus voler et prolonger les caractéristiques interactives de TCSH. Il est devenu la coquille de facto sur Linux, il est donc très courant.

Il y a aussi le ZSH, écrit pour être la coquille "Ultimate". C'est aussi très courant dans le monde Linux. Il a étendu Bash (et un peu pollinisé croisé, de nouvelles choses sont retournées à Bash).

Si je devais choisir une coquille, je choisirais Bash ou ZSH. Bash est peut-être dans quelques endroits supplémentaires que ZSH. ZSH est plus puissant, mais Bash s'est bien déroulé pour moi. Real/Bin/Sh Bourne Shell est autour juste pour des raisons historiques. Bash a à peu près tout ce que KSH a à offrir et plus. La syntaxe est plus propre que csh ou TCSH et offre de meilleures fonctionnalités que l'une ou l'autre d'entre elles.

Pour convertir un script dépend de quoi pour quoi. Style de coquillage de Bourne (sh, ksh, bash, zsh) à ou à partir de style CSH (CSH, TCSH) sera difficile. Aller de vieux à plus récent (/ bin/sh => bash,/bin/ksh => zsh) sera plus facile que l'inverse.

12
Rich Homolka

Les deux branches principales des coquilles sont les dérivés de la coque de Bourne (SH, Bash, Ksh, Ash, Yash et Zsh) et les dérivés de la CSH (TCSH et ... UHM ... TCSH).

Je soupçonne que je n'ai pas de chiffres réels) que Bash est le plus largement utilisé, il semble être la coquille par défaut dans la plupart des linxes.

La plupart des choses écrites dans un dérivé de shell de Bourne travailleront probablement dans d'autres. La plupart des choses écrites dans une coquille de Bourne devront probablement être modifiée pour courir sous CSH ou TCSH.

Personnellement, j'ai utilisé KSH quand j'ai commencé parce que c'est ce qui était sur le système que j'utilisais. J'utilise principalement Bash maintenant.

8
mazianni

J'ai utilisé de nombreux coquillages au fil du temps. Pas quelque chose de super avancé mais beaucoup de sysadmin et de programmation pratiques qui ont nécessité suffisamment de personnalisation.

Je pense que ZSH a plus d'options de personnalisation, au moins elle utilisait, mais après l'avoir utilisé depuis quelques années, j'en ai eu assez avec ses problèmes de stabilité et de codage de caractères. Bash est solide de roche, n'a jamais eu des problèmes similaires et il est installé partout.

1
Ari T