D'autres ont souligné que les prémisses de la question, à savoir que le shell Bourne Again est un défaut et omniprésent, sont carrément fausses.
En plus de cela, il existe effectivement de bonnes raisons d'utiliser autre chose que le shell Bourne Again pour interpréter les scripts shell. Ces raisons motivées grand projet de Ubuntu et Debian, sur plusieurs années, pour éliminer bashismes et de faire autant de scripts shell exécutés par l' initialisation du système (qui était beaucoup de scripts shell avec le système 5 rc
) et l' installation de paquets / utilisation de l' élimination de la Le shell Debian Almquist au lieu du shell Bourne Again.
Autrement dit, le shell Bourne Again, riche en fonctionnalités interactives, n’est pas l’interpréteur de shell le plus rapide pour un script shell conforme à POSIX. Donc, si on peut créer des scripts shell conformes à POSIX, en les interprétant avec un programme plus léger, comme le shell Debian Almquist, son système fonctionnera mieux. (En fin de compte, Debian a dû apporter de légers ajustements au shell Almquist, pour ajouter un support pour quelques constructions de shell non POSIX qui étaient simplement trop profondes et trop intégrées et trop utiles pour s'en débarrasser.)
Le résultat de tout cela a été un gain majeur en performances de bootstrap.
Donc, il y a deux classes distinctes de shell à considérer, ici:
- Les shells avec toutes les fonctionnalités interactives flashy, qui sont configurés en tant que shells de connexion interactifs pour les utilisateurs dans la base de données de comptes.
- Les shells qui interprètent rapidement un grand nombre de scripts, qui sont utilisés comme interpréteurs de script par les programmes de script shell.
Notez que parler de cela comme "préférer /bin/sh
" est une simplification excessive. Debian avait en fait au moins deux objectifs:
Face aux administrateurs utilisant le shell Debian Almquist, le shell Z (en mode POSIX), le shell Bourne Again (en mode POSIX), le shell MirBSD Korn, etc. /bin/sh
, il y avait soit…
… Rendre les scripts aussi portables que possible, de sorte que le basculement vers ce qui a été /bin/sh
mappé ne casse pas les choses; ou
… Faire des scripts non portables cibler explicitement le bon programme d'interprétation , au lieu d'attendre simplement cette /bin/sh
carte.
Il y avait fait la Debian Almquist shell le mappage par défaut pour la /bin/sh
place de la Bourne Shell, de sorte que ces scripts étaient compatible POSIX (ou, plus correctement, Debian Policy Manual conforme) ont couru plus vite.
Et bien sûr, une fois que l’on s’y prend, on peut aller beaucoup plus loin; tels que la prise en compte des compromis d'efficacité de ceux qui aiment /bin/true
et /usr/bin/clear
être des scripts shell ou des programmes compilés. Mais cela dépasse le cadre de cette réponse, heureusement. ☺
Rien de tout cela n'est très nouveau, ni même spécifique à Unix, bien sûr. Avant le début du siècle, j’écrivais et publiais un interpréteur de ligne de commande disponible en versions "interactive" et "non-interactive", expliquant cette division même dans son document et notant la différence entre les variables d’environnement COMSPEC
et OS2_SHELL
. De même, la discussion sur la suppression des basismes dans le System V de Debian rc
et les scripts d'installation / de suppression de paquets remonte aux années 1990.
Lectures complémentaires
/bin/sh
si vous n'utilisez pas debash
fonctions spécifiques . Un jour, vous pourriez être amené à utiliser l'un de vos scripts sur un système sur lequel il n'est pas installé (serveur distant, ordinateur embarqué ...)