La réponse courte à la question "pourquoi le sh Shell d'origine n'est pas présent en sh
" est qu'il n'y a pas de sh original.
Bon, ok, il y en a un : c'est le Thompson Shell . La version 1 possédait certaines des fonctionnalités que nous connaissons aujourd'hui, en particulier la redirection et les pipes (lire L'article de Dennis Ritchie sur les débuts d'Unix. ). Versions ultérieures des fonctionnalités supplémentaires telles que l'exécution en arrière-plan avec &
Il n'y avait pas de variables ou de structures de contrôle imbriquées, ni de globbing (implémenté avec un programme externe), ni de citation. Les conditionnels et les boucles étaient fournis par des programmes externes. if
(qui prend une condition et une commande comme arguments) et goto
(qui a fonctionné en changeant la position du fichier de son parent dans le fichier script).
En 1979, dans Unix V7 la Thompson Shell a été remplacée par la suivante /bin/sh
par le Bourne Shell . La première version avait déjà de nombreuses fonctionnalités qui sont présents dans le tableau de bord aujourd'hui, et les versions ultérieures introduites beaucoup plus . Quelques années plus tard, le Korn Shell est apparu sur la scène, avec un ensemble de fonctionnalités croissant ; de nombreuses variantes d'Unix l'ont installé sous le nom de ksh
.
En 1992, POSIX cod cod cod cod codé un ensemble minimum sh
qui était en fait Bourne avec quelques trucs en plus. Tout système qui s'appelait "Unix" devait implémenter au moins ces fonctionnalités. Les systèmes Unix commerciaux utilisent généralement ksh comme sh POSIX, mais quelques-uns (par ex. OSF/1 ) avaient les leurs.
Ni le Shell de Bourne ni le Shell de Korn n'étaient open source jusqu'à assez récemment, donc lorsque le monde Linux a commencé à se former au milieu des années 1990, ils n'étaient pas disponibles. /bin/sh
devait être quelque chose d'autre. La plupart des distributions Linux ont choisi bash un Shell de l'équipe de la Projet GNU qui se situait entre Bourne et Korn en termes de fonctionnalités de script, et bien meilleur qu'eux pour une utilisation interactive). La seule alternative viable était pdksh ("public domain Korn Shell"), une application libre (aujourd'hui abandonnée, mais vivant sous le nom de mksh qui est développé activement ), mais je n'ai pas souvenir d'une distribution Linux utilisant pdksh en tant que /bin/sh
Je ne sais pas pourquoi, je suppose que c'est parce que les distributions Linux ont toujours été des distributions GNU/Linux, fournissant essentiellement des versions GNU de tous les outils pour lesquels une version GNU existe.
Il existe également plusieurs implémentations open source de sh
appelés "cendres", notamment le Almquist Shell mais ils étaient très incomplets, manquant de certaines fonctionnalités POSIX que les gens voulaient utiliser. Un programmeur qui était un mainteneur Debian, Herbert Xu , extended ash pour le rendre conforme à POSIX. Finalement, sa version a été renommée en dash, et il y a eu une certaine pression pour qu'elle devienne /bin/sh
dans Debian au lieu de bash. Ubuntu a démarré avant que Debian ne commence à traiter systématiquement les bashismes (l'utilisation de fonctionnalités propres à bash dans #!/bin/sh
scripts) en tant que bogues . Les deux ont commuté ultérieurement ( Ubuntu 6.10 Debian seulement en 2009 ( c'était un but pour Lenny mais le changement n'a été fait qu'après la sortie de Lenny, c'est-à-dire dans Squeeze)).
Un grand raison d'utiliser dash as plutôt que bash como /bin/sh
est qu'il est beaucoup plus rapide. C'était particulièrement important pour Ubuntu, qui s'est efforcé de maintenir des temps de démarrage courts depuis le début. Dash a également tendance à utiliser moins de mémoire que bash, ce qui est quelque peu important pour les scripts d'emballage qui restent autour juste pour faire un peu de nettoyage lorsque le programme sous-jacent quitte. Un autre avantage de dash est qu'il ne s'appuie que sur libc (la bibliothèque centrale du système) alors que bash s'appuie également sur les bibliothèques de support du terminal (il ne peut pas démarrer sans elles, même pour exécuter un scripts) ; cela signifie que dash a une meilleure chance de continuer à fonctionner sur un système cassé.
À un moment donné au cours du 21e siècle, le Shell de Korn est devenu open source, et des versions open source du Shell de Bourne sont apparues (d'anciennes versions, car le développement avait cessé des années auparavant). Mais dash et bash étaient trop fermement ancrés dans le monde Linux pour qu'ils soient acceptés, surtout le Shell Bourne puisque sa valeur aujourd'hui n'est qu'historique. Dash a remplacé bash parce qu'il avait des avantages clairs, mais aucun des autres prétendants n'a d'avantage décisif comme /bin/sh
.