Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

shell utilisé par system() ?

4 réponses
Avatar
mpg
Bonjour,

Quel est le shell utilisé par la fonction system() pour, par exemple,
développer les * et autres ?

Manuel.

4 réponses

Avatar
Nicolas George
mpg wrote in message <fuldut$310h$:
Quel est le shell utilisé par la fonction system() pour, par exemple,
développer les * et autres ?


Le Murphy shell : s'il y a une moindre dépendance de ton programme au
comportement du shell, tu peux être sûr qu'il y aura des fois où ce sera le
mauvais qui sera appelé.

Donc il faut faire des programmes qui n'en dépendent pas.

Avatar
espie
In article <480e57ff$0$23023$,
Nicolas George <nicolas$ wrote:
mpg wrote in message <fuldut$310h$:
Quel est le shell utilisé par la fonction system() pour, par exemple,
développer les * et autres ?


Le Murphy shell : s'il y a une moindre dépendance de ton programme au
comportement du shell, tu peux être sûr qu'il y aura des fois où ce sera le
mauvais qui sera appelé.

Donc il faut faire des programmes qui n'en dépendent pas.


Pour completer la reponse de Nicolas, glob() te permettra d'etendre toi-meme
les parametres comme tu veux, et la syntaxe 'system LIST' te permet d'invoquer
un programme sans passer par un shell.

perldoc -f system est un peu plus optimiste (si j'ose dire) et te garantit
'/bin/sh -c' sur les plateformes Unix.

Comme de toutes facons, hors Unix, tu peux t'attendre a une grosse dose de
n'importe quoi sur tout ce qui ressemble de pres ou de loin a 'system',
il n'y a pas grand risque, en fait.

Mais bon, system + shell, c'est plus un raccourci pour petit script qu'une
construction vraiment solide a utiliser en perl...


Avatar
mpg
Le (on) mardi 22 avril 2008 23:58, Marc Espie a écrit (wrote) :

In article <480e57ff$0$23023$,
Nicolas George <nicolas$ wrote:
Le Murphy shell : s'il y a une moindre dépendance de ton programme au
comportement du shell, tu peux être sûr qu'il y aura des fois où ce sera
le mauvais qui sera appelé.

:)



Pour completer la reponse de Nicolas, glob() te permettra d'etendre
toi-meme les parametres comme tu veux, et la syntaxe 'system LIST' te
permet d'invoquer un programme sans passer par un shell.

Oki, c'est bon à savoir. J'aime beaucoup la référence au shell

Unix « standard » csh : personellement, ça ne m'apprend pas grand chose sur
les détails du globbing effectué :/

perldoc -f system est un peu plus optimiste (si j'ose dire) et te
garantit '/bin/sh -c' sur les plateformes Unix.

Le script en question n'est de toutes façons pas du tout supposé tourner

hors plateforme Unix. Mes expériences m'avaient montré qu'apparemment, ça
ne dépend pas du shell préféré de la personne qui invoque le script. C'est
cool de savoir.

Au fait, j'avais bêtement essayé perldoc system et oublié de regarder man
perldoc pour trouver -f (la fatigue). Merci pour l'info :)

Mais bon, system + shell, c'est plus un raccourci pour petit script qu'une
construction vraiment solide a utiliser en perl...


Disons que le script en question, sans être petit, n'a pas vraiment vocation
à être une oeuvre d'art ou un monument de robustesse. Je note quand même
tes remarques pour d'autres occasions.

Manuel.


Avatar
Paul Gaborit
À (at) Wed, 23 Apr 2008 12:04:02 +0200,
mpg écrivait (wrote):
Le (on) mardi 22 avril 2008 23:58, Marc Espie a écrit (wrote) :
Pour completer la reponse de Nicolas, glob() te permettra d'etendre
toi-meme les parametres comme tu veux, et la syntaxe 'system LIST' te
permet d'invoquer un programme sans passer par un shell.

Oki, c'est bon à savoir. J'aime beaucoup la référence au shell

Unix « standard » csh : personellement, ça ne m'apprend pas grand chose sur
les détails du globbing effectué :/


C'est pour lever cette imprécision que depuis la version 5.6.0 de
perl, glob() est implémenté via File::Glob. Et en lisant la doc de ce
module, on s'aperçoit que la référence est POSIX glob() (je vous
laisse le soin de lire le reste...).

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>