J'ai remarqué qu'aucun système avec lequel j'ai travaillé n'avait /bin/sh
un véritable exécutable. C'est toujours un lien symbolique vers dash
, bash
en mode POSIX, ou quelque chose de similaire.
Pourquoi? Quels sont les inconvénients de l'utilisation du vrai original /bin/sh
? (Vitesse? Licence?)
sh
elles pas un lien symbolique versksh
?ksh
.bash
IIRC.sh
est basé sur un standard, ce qui signifie que nous pouvons avoir plusieurs implémentations qui se comporteront de manière claire et précise tant que vous utiliserez la syntaxe standard dans votre script.Réponses:
Je suppose que le manque de fonctionnalités - pas d’historique des commandes, pas de redirection sophistiquée, pas d’édition en ligne de commande. BSD a introduit
csh
le shell C pour ces raisons. Un autre facteur est que Genuine Bourne Shell n'était disponible que récemment sous forme open source . Sauf si vous avez obtenu une licence, vous ne pouvez pas le distribuer. Cela l'a mis hors de portée des distributions gratuites et l'a rendu idéologiquement désagréable pour d'autres distributions et * BSD.Mais le code est disponible maintenant. Vous pouvez jeter un coup d'oeil, le compiler, l'essayer.
la source
sh
est identique à l'utilisation, à l'bash
exception du fait qu'elle est plus lente, les programmes sont plus longs et plus difficiles à gérer.sh
commande d’exécuter un shell compatible POSIX, ce que l’ancien shell Bourne n’est pas. Bien que POSIX n’exige passh
d’être présent/bin/sh
, c’est le répertoire le plus logique.sh
, les extensions tilde et accolade ne sont pas développées, il manque des éléments intégrés (par exemple,pushd
etpopd
,select
) pas d’expansion arithmétique. Beaucoup de variables sont manquantes, par exemplePIPESTATUS
.La déclaration dans votre question est incorrecte. Solaris jusqu'à la version 10 est la fourniture de l'héritage véritable shell Bourne
/bin/sh
. Ceci a été fait pour ne pas briser la compatibilité avec d'anciens scripts qui pourraient échouer avec un shell différent. Ce choix était très frustrant sinon.La plupart, sinon toutes les versions restantes d'Unix et de versions similaires, y compris Solaris 11, fournissent un shell compatible
/bin/sh
POSIX car POSIX demande à lash
commande de lancer un shell POSIX, et non le shell Bourne hérité qui n'est pas conforme./bin/sh
est généralement :ksh88
ouksh93
sur les implémentations commerciales Unixbash
surOS/X
(bien qu'il soitzsh
)ash
oupdksh
dérivé sur autreBSDs
bash
oudash
sur les distributions Gnu / Linux.Ce n'est pas nécessairement un lien, mais peut être un véritable exécutable sur de nombreux systèmes, mais sur GNU / Linux.
Fait intéressant, malgré ce que dit la réponse la plus élevée à votre question, ce n’est pas le manque de fonctionnalités qui incite les développeurs de la distribution à installer quelque chose de différent du shell Bourne hérité,
/bin/sh
mais le désir d’être aussi conforme que possible à POSIX, c’est-à-dire Unix comme OS. Le fait que le shell POSIX ait plus de fonctionnalités que le shell Bourne existant n’est qu’un effet secondaire de cet objectif de conformité standard.Il est également vrai que certains shells, notamment
bash
, se comportent différemment lorsqu'ils sont appeléssh
, ce qui supprime principalement les fonctionnalités du shell, et non l'inverse.la source
Autant que je sache, le shell Bourne original ne pouvait pas être utilisé par les BSD et le projet GNU, à cause de sa licence.
À l'époque, l'Unix d'origine n'avait pas de licence et le projet GNU avait besoin d'un shell qui était sous la licence GPL, donc ils utilisaient le bash.
La même chose est vraie pour BSD4, le parent de tous les BSD. Grâce au procès intenté par AT & T, ils ont dû réécrire toutes les sources de l’Unix original, y compris le shell Bourne.
À partir de FreeBSD
man sh
Les deux projets ont donc été contraints de ne pas utiliser le shell Bourne et de se contenter d’un véritable shell open source.
la source
Il y a eu d'autres problèmes. Bourne Shell utilisait sbrk () à la place de malloc (), ce qui le rendait peu portable.
Après que Bourne Shell soit devenu OpenSource via OpenSolaris, j’ai créé une version portable hafway puis une version réellement portable en remplaçant sbrk () par malloc () avec l’aide de Geoff Collyer (la même personne qui avait évité sbrk () dans le Korn Shell).
La raison initiale pour laquelle j'ai créé une version portable du Bourne Shell est que j'ai aimé rendre l'éditeur d'histoire que j'ai écrit pour mon "bsh" entre 1982 et 1984 également disponible dans le Bourne Shell. Pendant ce temps, j'ai porté la plupart des caractéristiques uniques que j'ai écrites pour "bsh" sur Bourne Shell.
C'est entre autres:
La page de manuel en ligne est à l’ adresse suivante : http://schillix.sourceforge.net/man/man1/bosh.1.html. Les sources font partie de la boîte à outils schily à l’adresse suivante:
https://sourceforge.net/projects/schilytools/files/
Je recommande d'utiliser: http://sourceforge.net/projects/schilytools/files/schily-2015-08-18.tar.bz2 ou une version plus récente.
PS Je suis intéressé par les commentaires
la source
Il est associé à des coques offrant une compatibilité ascendante à 100% . Vous ne perdez rien de ce que le shell original a, mais vous gagnez plus de fonctionnalités. Il n'y a pas d'inconvénients, alors pourquoi rater les nouvelles fonctionnalités? C'est la même raison pour laquelle
/bin/vi
est généralement lié à vim .la source
bash
est beaucoup, beaucoup plus lent quedash
IFS=,; rm file1,file2,file3
supprimerait ces 3 fichiers dans le shell Bourne. Ce (idiot) fonctionnalité a été supprimée dans sh Posix. Il existe des dizaines de différences subtiles pouvant faire en sorte qu'un script écrit pour le shell Bourne fonctionne différemment avec un sh POSIX.