perl et l'export d'une varible d'environement - Perl - Programmation
Marsh Posté le 26-12-2006 à 14:02:00
disons que dans mon script j'utilise une variable d'environnement
mais que cette variables d'environnement ne contient pas de valeur;
si j'execute mon script sa va bogué;
alors je souhaiterai tester et si elle n 'en contient pas, je lui en affecte une et ensuite je voudrais exporter cette variable pour pouvoir l'utiliser dans d'autre script;
(en shell on fait quelquechose comme sa mavariabeenv=toto;export mavariabeenv)
Marsh Posté le 26-12-2006 à 15:04:38
Dans ce cas, tu peux modifier le hachage %ENV.
Exemple :
$ cat test.ksh |
Marsh Posté le 26-12-2006 à 16:47:40
J'ai fait exprès d'appeler un script ksh séparé pour montrer que la variable d'environnement est bien accessible aux processus fils dès lors qu'elle existe dans le hâchage %ENV.
Le "export" (qui est un mot-clef ksh, et non perl) est implicite.
Marsh Posté le 27-12-2006 à 09:33:43
j'ai fait cela dans un script
Code :
|
quand je lance mon script la variable n'a pas de valeur,
donc je dois en saisir une;
je la saisi et ensuite j'ai une boucle qui m'affiche tous ce que je possede dans %ENV;
A l'affichage des données contenus dans mon %ENV,je constate bien que ma variable possede bien la nouvelle valeur, que j'ai saisi;
Mais le probleme, c'est que j'ai fait dans mon shell un echo de ma variable et la à ma surprise, ma variable est vide;
je relance mon script et il me redemande de saisir une valeur;
je comprend pas , pourtant quand je fait l'affichage du tableau,la variable d'environnement contient bien la bonne valeur
????
Marsh Posté le 28-12-2006 à 09:20:57
Est-ce que tu fais quelque chose comme ça ?
$ ton_script.pl |
Si oui, alors c'est normal. La modification des variables d'environnement n'est valable que pour le processus courant et, si la variable est "exportée", pour les processus fils.
Or, lorsque tu appelles un script PERL, il est lancé dans un processus fils à ton shell. Ton script a beau redéfinir ce qu'il veut dans les variables d'environnement, ton shell est le processus père, et n'est donc pas touché.
Marsh Posté le 28-12-2006 à 17:57:39
Une modification des variables d'environnement ne s'applique qu'au processus courant et aux processus fils.
C'est de l'héritage, grosso modo. Un fils hérite de ses parents, mais pas l'inverse (cas théorique ).
Schématiquement :
|
Selon ce shéma, une modification des variables d'environnement dans ton script PERL ne profite qu'à ton script PERL lui-même, et à ses fils (et petits-fils, et arrière-petits-fils, etc.)
Par contre, le shell courant, le processus lambda et les fistons du processus lambda ne voient pas leurs variables d'environnement modifiées.
Marsh Posté le 02-01-2007 à 13:04:07
ok je comprends mieux
en gros ce que je souhaite faire,c'est pratiquement impossible
Marsh Posté le 02-01-2007 à 13:18:38
Voila. Mais généralement, lorsque aucune solution technique n'existe, c'est qu'il y a un problème de conception.
Dis-nous ce que tu essaies de faire, il y a sans doute une façon simple d'y remédier.
Marsh Posté le 02-01-2007 à 18:58:04
Bonjour,
j'ai exactement le même problème (mis à part que j'utilise un shell windows)
Elmoricq,
Quelles sont les solutions possibles pour récupérer une variable d'un programme Perl lancé à partir d'un batch (.bat) ?
La possibilité de passer par un fichier ne me plait pas trop, je trouve çà plutôt dangereux (par exemple, dans le cas ou le fichier d'un ancien traitement est resté par erreur et est réutilisé dans la nouvelle exécution du script...).
Mais peut-être que je ne vois pas tout le potentiel de cette possibilité.
Si quelqu'un a des idées, je suis preneur !!
Marsh Posté le 02-01-2007 à 21:52:26
Si l'exécution de ton script ressemble à quelque chose comme ça :
C:\>script.bat |
Et si tu veux, une fois revenu au script, utiliser des données créées par le programme PERL, alors tu disposes de deux solutions :
Il s'agit là de problèmes de conception en fait, le fait qu'il s'agisse de PERL, de shell script ou de batch n'y change rien.
Marsh Posté le 26-12-2006 à 13:36:14
salut,
Est il possible en perl de faire un export d' une variable d'environnement dans l'hypothese ou cette variable n'est pas defini ou si l'on souhaite modifier sa valeur ?
Merci