OVH Cloud OVH Cloud

Pourquoi tant de shell différents ?

42 réponses
Avatar
Clampin
Salut,

Ma question va peut être vous paraître un peut conne... mais pourquoi
dans le shell de mac os X (et dans tout les unix visiblement), il y a
tant de shell différents pour le terminal ?

Attention, ce n'est pas une critique, mais une simple question, très
conne je l'admet....
--
<http://www.clampin.com/>, l'actualité Mac vue par Clampin

2 réponses

1 2 3 4 5
Avatar
Stephane Chazelas
2004-10-19, 11:16(+02), FiLH:
[...]
Oui, mais peu de personnes savent en fait faire la difference
entre Bourne et sh. Sur la plupart des Unix, sh n'est plus


Peu de personnes savent en fait faire des choses vraiment portables...


"vraiment portable" n'a pas vraiment de sens si on ne definit
pas "vraiment" et "portable", meme en se restreignant a "Unix"
qui a une histoire plus de trentenaire.

Bourne. Une syntaxe de sh a ete standardisee. On peut s'appuyer
sur un texte pour ecrire des scripts pour les systemes
conformant a ce standard. Si on doit ecrire un script Bourne, on
doit s'appuyer sur *des* implementations du shell Bourne on
n'est jamais garanti qu'un script marchera sur telle ou telle
machine.


C'est un sous ensemble de POSIX non ?


Pas tout a fait. Il y a pas mal de trucs qui fonctionneront
differemment.

{ sous-shell; } > /dev/null
un sous-shell est cree dans le shell Bourne a cause de la
redirection (pareil pour les boucles) -> les valeurs des
variables changent suivant le shell.

var=value echo toto
pour tous les builtins du Bourne shell, dans ce cas, la valeur
de var reste positionnee. Ca peut etre genant dans des
utilisations comme IFS=: read v1 v2

Le word splitting fonctionne differemment. "$*" est different.
"$@" est different.

Bien sur:
echo ~
n'affiche pas "~" dans les shells POSIX.

etc.

Je sais bien que ce serait parfait si POSIX était la base de
portabilité, mais hélas ce n'est pas le cas.


Depuis 10 ans, c'est plutot le cas.

Le probleme est qu'il faut adapter PATH et la ligne #!.

A noter que pour etre conformant, un script ne doit pas
commencer par "#!" ;-[

Le pb ici est d'utiliser le plus grand ensemble commun à tous les sh-like.


Le probleme ne vient pas tant du shell que des outils (tr, sed,
awk, echo...). Voir la page info d'autoconf (entre autres) pour
les problemes de portabilité.

Les scripts d'install de paquetages divers et variés que j'utilise
fonctionnent parfaitemetn avec /bin/sh.


Quel /bin/sh ?. Les /bin/sh de Solaris, FreeBSD, HPUX ou Linux
sont tous differents (Bourne, ash, ksh, bash).

Est-ce que tu les as essayés sur tous ces systemes.

--
Stephane


Avatar
FiLH
Stephane Chazelas writes:
2004-10-19, 11:16(+02), FiLH:
Les scripts d'install de paquetages divers et variés que j'utilise
fonctionnent parfaitemetn avec /bin/sh.


Quel /bin/sh ?. Les /bin/sh de Solaris, FreeBSD, HPUX ou Linux
sont tous differents (Bourne, ash, ksh, bash).

Est-ce que tu les as essayés sur tous ces systemes.


Non, mais c'est les mêmes scripts qui sont utilisés.
J'avoue que je fais confiance et que je ne suis pas allé vraiment
vérifé que cela marche comme on le lit dans le script.

Par exemple je travaille actuellement sur des pilotes d'imprimante HP,
c'est les mêmes script shell pour HP-UX et Solaris.

FiLH

--
FiLH photography. A taste of freedom in a conventional world.
Web: http://www.filh.org e-mail
FAQ fr.rec.photo : http://frp.parisv.com/
Sitafoto la photo a Bordeaux : http://sitafoto.free.fr/


1 2 3 4 5