Leopoldo Ghielmetti wrote: > 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 Merci c'est très instructif. A priori la première sera suffisante pour mon utilisation, mais je retiens la deuxième en cas de besoin!
++ Nicolas _______________________________________________ gull mailing list [email protected] http://lists.alphanet.ch/mailman/listinfo/gull
