La réponse courte à “pourquoi la coquille d'origine n'est pas présente dans sh
” est qu'il n'y a pas de sh d'origine.
Bon, d'accord, il y a: c'est la coquille Thompson . La version 1 présentait certaines des fonctionnalités que nous connaissons aujourd'hui, notamment la redirection et les pipes (lisez l'article de Dennis Ritchie sur la première histoire Unix ). Les versions ultérieures ont ajouté des fonctionnalités telles que l'exécution en arrière-plan avec &
, globbing (implémenté avec un programme externe) et certaines formes de citation, mais il n'y avait pas de variables ou de structures de contrôle imbriquées. Les conditions et les boucles étaient fournies via des programmes externes if
(qui utilisaient une condition et une commande comme arguments) et goto
qui fonctionnaient en modifiant la position du fichier parent dans le fichier script.
En 1979, dans Unix V7 , le shell Thompson a été remplacé comme /bin/sh
par le shell Bourne . La première version présentait déjà de nombreuses fonctionnalités présentes dans Dash aujourd'hui, et les versions suivantes en ont introduit beaucoup plus . Quelques années plus tard, le shell Korn est entré en scène, avec un ensemble de fonctionnalités en croissance; de nombreuses variantes d'Unix l'ont installé sous le nom ksh
.
En 1992, POSIX a codifié un ensemble minimal de sh
fonctionnalités, essentiellement Bourne, et quelques autres éléments. Tout système appelé «Unix» devait au moins implémenter ces fonctionnalités. Les systèmes commerciaux Unix utilisaient habituellement ksh comme POSIX sh, mais quelques-uns (par exemple OSF / 1 ) avaient les leurs.
Ni le shell Bourne ni le shell Korn n’étaient des sources ouvertes jusqu’à récemment, de sorte que lorsque le monde Linux a commencé à se former au milieu des années 90, ils n’étaient plus disponibles. /bin/sh
devait être quelque chose d'autre. La plupart des distributions Linux utilisaient bash , un shell du projet GNU qui avait tendance à être entre Bourne et Korn en termes de fonctionnalités de script, bien mieux qu’en utilisation interactive. La seule alternative viable était pdksh ("domaine public Korn"), un programme libre (maintenant abandonné, mais vivant comme mksh , qui est activement développé ), mais je ne me souviens pas d’une distribution Linux utilisant pdksh./bin/sh
, Je ne sais pas pourquoi, parce que les distributions Linux étaient toujours des distributions GNU / Linux, livrant essentiellement les versions GNU de tout outil pour lequel une version GNU existait déjà.
Il y avait aussi plusieurs implémentations open source de sh
"ash", notamment le shell Almquist , mais elles étaient très incomplètes, manquant de certaines fonctionnalités POSIX que les gens voulaient utiliser. Herbert Xu , un programmeur qui était responsable de Debian , a étendu les cendres pour les rendre compatibles avec POSIX. Finalement, sa version a été renommée en dash, et des efforts ont été déployés pour le rendre /bin/sh
dans Debian au lieu de bash. Ubuntu a commencé avant que Debian ne commence à traiter systématiquement les basismes (utilisation de fonctionnalités spécifiques à bash dans les #!/bin/sh
scripts) comme des bogues . Les deux ont changé plus tard ( Ubuntu 6.10 , Debian seulement en 2009 ( c’était un objectif pour Lenny). mais le changement n’a été effectué qu’après la publication de Lenny, c’est-à-dire en compression)).
Une importante raison d'utiliser comme tableau de bord plutôt que bash comme /bin/sh
est qu'il est beaucoup plus rapide. C'était particulièrement important pour Ubuntu, qui s'efforce depuis le début de garder les temps de démarrage courts. Dash a également tendance à utiliser moins de mémoire que bash, ce qui est assez important pour les scripts wrapper qui restent dans les parages pour effectuer un nettoyage lorsque le programme sous-jacent se termine. Un autre avantage du tableau de bord est qu'il ne s'appuie que sur libc (la bibliothèque système principale), tandis que bash s'appuie également sur les bibliothèques de support terminal (il ne peut pas démarrer sans elles, même pour exécuter un script); cela signifie que dash a une meilleure chance de continuer à travailler sur un système en panne.
Au cours du 21ème siècle, le shell Korn est devenu open source et des versions open source du shell Bourne sont apparues (anciennes versions, car le développement avait cessé depuis des années). Mais dash et bash étaient trop fermement ancrés dans le monde Linux pour qu’ils puissent être acceptés, en particulier le shell Bourne, car sa valeur n’est aujourd’hui que historique. Dash déplacé bash parce qu'il avait des avantages évidents, mais aucun des autres prétendants n'a aucun avantage décisif comme /bin/sh
.