salut, Sous bash il y a trois solutions que je connais, la première consiste à exécuter le deuxième script dans le même environnement du premier en écrivant: ##### SCRIPT 1 #!/bin/sh echo "begin script 1" . ./script2.sh echo "VAR BAR: $BAR" echo "end script 1"
##### SCRIPT 2 #!/bin/sh echo "begin script 2" BAR="foo" echo "VAR BAR: $BAR" export $BAR echo "end script 2" L'avantage c'est que c'est très simple à implémenter. L'inconvénient c'est que toutes les variables de script2.sh seront visibles dans script1.sh et que toutes les modifications apportées par script2.sh seront aussi visibles dans script1.sh. En pratique il s'agit d'un include à la C. La deuxième solution c'est de se faire renvoyer ces informations par le script2.sh sur le stdout (ou autre fichier) et d'intégrer ces variables dans script1.sh. L'avantage c'est que seul les variables qu'on désire transitent tandis que les autres restent locales. Inconvénient, le script2.sh doit être fait exprès pour ça, donc c'est exclus d'avoir un script générique. Si tu utilises la stdout: ##### SCRIPT 1 #!/bin/sh echo "begin script 1" eval "$(./script2.sh)" echo "VAR BAR: $BAR" echo "end script 1" ##### SCRIPT 2 #!/bin/sh echo "begin script 2" >&2 BAR="foo" >&2 echo "VAR BAR: $BAR" >&2 echo "end script 2" >&2 echo "export BAR=\"$BAR\"" En plus il a le désavantage que le script2.sh va communiquer uniquement avec le stderr tandis que le stdout est utilisé pour transmettre les variables. Une variante c'est d'utiliser d'autres déscripteurs de fichiers pour transmettre les variables d'environnement tout en laissant les stdout et stderr fonctionner comme d'habitude: ##### SCRIPT 1 #!/bin/sh echo "begin script 1" ( eval "$(./script2.sh 3>&1 1>&4)" ) > 4>&1 echo "VAR BAR: $BAR" echo "end script 1" ##### SCRIPT 2 #!/bin/sh echo "begin script 2" BAR="foo" echo "VAR BAR: $BAR" export $BAR echo "end script 2" echo "export BAR=\"$BAR\"" >&3 Qui a le désavantage que le script2.sh ne marchera pas en dehors du contexte du script1.sh, en effet si on l'exécute tout seul on aura: ./script2.sh: line 7: 3: Bad file descriptor La raison d'utiliser le fd3 et fd4? Simple, de cette façon les stderr et stdout du script2.sh fonctionneront exactement de façon standard tandis que le fd3 sera utilisé pour la transmission des variables d'environnement. A toi de voir laquelle te convient le mieux. ciao, Leo On Wed, 2006-11-08 at 15:13 +0100, Nicolas Borboën wrote: > Bonjour à tous, > J'ai deux scripts shell, l'un appel l'autre. J'aimerais récupérer une > variable de l'autre dans le premier, c'est possible? > > Ci-dessous mes script de test (aussi dispo ici: > http://paste.ubuntu-nl.org/30623/) > > ##### SCRIPT 1 > #!/bin/sh > echo "begin script 1" > ./script2.sh > echo "VAR BAR: $BAR" > echo "end script 1" > > > ##### SCRIPT 2 > #!/bin/sh > echo "begin script 2" > BAR="foo" > echo "VAR BAR: $BAR" > export $BAR > echo "end script 2" > > > PS: m'excuse d'avance au cas ou cela coulerait de source pour certains :-p > _______________________________________________ > gull mailing list > [email protected] > http://lists.alphanet.ch/mailman/listinfo/gull _______________________________________________ gull mailing list [email protected] http://lists.alphanet.ch/mailman/listinfo/gull
