Vous voulez améliorer cette question ? Mettez à jour la question afin qu'elle se concentre sur un seul problème en modifiant ce message.
Fermé il y a 6 ans.
Améliorer cette question
Quelles sont les différences fondamentales entre les shells *NIX traditionnels et quels scénarios pourraient vous inciter à utiliser l'un plutôt que l'autre ? Je comprends qu'une partie de cela dépend probablement des préférences de l'utilisateur, mais je n'ai jamais utilisé que Bash et je suis intéressé de savoir où un autre shell pourrait être utile.
En outre, y a-t-il un impact sur les scripts shell écrits par l'utilisateur lors de l'exécution sous un shell ou un autre ou s'agit-il simplement de changer le shell en haut du fichier ? Mon instinct me dit que ce n'est pas si facile.
Réponse acceptée :
Pour une utilisation interactive, il y a deux principaux concurrents, Bash et zsh, plus le straggler tcsh et le newcomer fish.
-
Bash est le shell officiel du projet GNU et le shell par défaut sur la plupart des distributions Linux. Sur d'autres unices qui ne sont pas livrés avec un shell interactif décent dans le cadre de l'installation de base, je pense que Bash est ce que les gens ont tendance à choisir, dans une boucle d'auto-renforcement "Bash est partout, donc je vais l'utiliser aussi". Voir aussi Pourquoi Bash est-il partout ? (avec beaucoup d'informations historiques).
-
Zsh a presque toutes les fonctionnalités de Bash et bien d'autres fonctionnalités (utiles !). Son principal inconvénient est qu'il est moins connu, ce qui, en pratique, signifie que vous êtes moins susceptible de le trouver déjà installé sur un système que quelqu'un d'autre a configuré et qu'il existe moins de documentation tierce à ce sujet. Voir aussi Quelles sont les fonctionnalités de zsh que vous utilisez ?, Quelles sont les fonctionnalités de zsh qui manquent à Bash, ou vice versa ?, Quelles sont les différences pratiques entre Bash et Zsh ?.
-
Tcsh était autrefois (jusqu'au début des années 1990) le shell avec les meilleures fonctionnalités interactives, comme son prédécesseur csh. Cela l'a rendu populaire pour une utilisation interactive (mais pas pour les scripts). Zsh a rattrapé tcsh et s'est encore amélioré assez rapidement, et Bash a rattrapé (avec achèvement programmable) au début des années 2000, alors que tcsh n'a pratiquement pas progressé au cours des 15 dernières années. Il n'y a donc aucune raison d'apprendre tcsh maintenant.
-
Fish essaie d'être plus propre que ses prédécesseurs. Il a quelques fonctionnalités intéressantes (syntaxe plus simple, coloration de la syntaxe sur la ligne de commande) mais en manque d'autres (ce que l'auteur n'aime pas). La communauté de poissons est beaucoup plus petite que celle de zsh, ce qui rend les effets encore plus aigus.
Pour les scripts, vous pouvez cibler plusieurs langages, en fonction de la portabilité de vos scripts.
-
Tout ce qui prétend être de type Unix a un shell dérivé de Bourne comme
/bin/sh
. Il y a encore quelques unices commerciaux autour de/bin/sh
n'est pas compatible POSIX. -
Presque tous les Unix en cours d'exécution ont un
sh
exécutable qui est au moins conforme à au moins POSIX.2-1992 et généralement au moins POSIX:2001 alias Single Unix v3. Ce shell peut vivre dans un répertoire différent tel que/usr/bin/posix
ou/usr/xpg6/bin
. Des couches d'émulation POSIX existent également pour à peu près tous les systèmes suffisamment puissants pour le prendre en charge, ce qui en fait une cible attrayante. -
De nombreux systèmes Unix ont ksh93, qui apporte des fonctionnalités très utiles qui manquent à POSIX sh (tableaux, tableaux associatifs, globs étendus (
*(foo)
,@(foo|bar)
, …), null globs (~(N)foo*
), …). Ksh était initialement un logiciel commercial (il est devenu gratuit en 2000, après que certaines habitudes se soient établies), et de nombreux unix gratuits (Linux, *BSD) ont pris l'habitude de ne fournir qu'un clone gratuit beaucoup plus ancien (pdksh) dépourvu de beaucoup de ces fonctionnalités utiles. . Pdksh est maintenant remplacé par mksh en dehors d'OpenBSD, mais même mksh ne parvient pas à implémenter toutes les fonctionnalités de ksh93. Aujourd'hui, vous ne pouvez pas compter sur la disponibilité de ksh93 partout, en particulier sur Linux où Bash est la norme. -
Bash est toujours disponible sur Linux (sauf certaines variantes embarquées) et souvent sur d'autres unices. Il possède la plupart des fonctionnalités utiles de ksh93, bien que parfois avec une syntaxe différente.
-
Zsh possède la plupart des fonctionnalités utiles de ksh93 et Bash. Sa syntaxe de base est plus propre mais incompatible avec Bourne. À l'exception de macOS, ne comptez pas sur la disponibilité de zsh sur un système que vous n'avez pas installé.
-
Pour des scripts plus avancés, vous pouvez vous tourner vers Perl ou Python. Ces langages ont des structures de données appropriées, des fonctionnalités de manipulation de texte décentes, des mécanismes de combinaison de processus et de communication décents, et des tonnes de bibliothèques disponibles. La plupart des systèmes Unix les ont, soit fournis avec le système d'exploitation, soit installés par l'administrateur (car il y a tellement de scripts Perl et Python que c'est un système rare qui n'en a pas au moins un de chaque).