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
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
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.
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
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/
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 filh@filh.org
FAQ fr.rec.photo : http://frp.parisv.com/
Sitafoto la photo a Bordeaux : http://sitafoto.free.fr/
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/