j'ai un job qui lance un script sheel, qui value des variables et qui lance un script perl.
Depuis le script perl, j'ai besoin d'une variable d'environnement du script shell (qui est exportee).
j'ai lance un simple: $jobid=`/bin/echo $JOBID` mais ma variable $jobid est vide..
qu'est ce que je rate?
Je ne connais pas les scripts shell, mais je donne un exemple entièrement écrit en perl:
premier.pl ========================= ======= use strict; use warnings;
print "Demarrage du premier programme.n";
$ENV{JOBID} = '12345';
print "Au debut: JOBID = '$ENV{JOBID}'.n"; print "Maintenant j'appelle le second programme.n";
system('perl second.pl');
print "Maintenant dans premier: JOBID = '$ENV{JOBID}'.n"; ========================= =======
second.pl ========================= ======= use strict; use warnings;
print "nAu debut du second programme: JOBID = '$ENV{JOBID}'.n"; print "Mais je change JOBID.n";
$ENV{JOBID} = '67890';
print "Maintenant: JOBID = '$ENV{JOBID}'.n"; print "Fin du second programme.nn"; ========================= =======
voici le résultat quand je lance "perl premier.pl": ========================= ======= Demarrage du premier programme. Au debut: JOBID = '12345'. Maintenant j'appelle le second programme.
Au debut du second programme: JOBID = '12345'. Mais je change JOBID. Maintenant: JOBID = '67890'. Fin du second programme.
Maintenant dans premier: JOBID = '12345'. ========================= =======
octane@alinto.com wrote:
Bonjour,
j'ai un job qui lance un script sheel, qui value des variables et qui
lance un script perl.
Depuis le script perl, j'ai besoin d'une variable d'environnement du
script shell (qui est exportee).
j'ai lance un simple:
$jobid=`/bin/echo $JOBID`
mais ma variable $jobid est vide..
qu'est ce que je rate?
Je ne connais pas les scripts shell, mais je donne un exemple
entièrement écrit en perl:
premier.pl
========================= =======
use strict;
use warnings;
print "Demarrage du premier programme.n";
$ENV{JOBID} = '12345';
print "Au debut: JOBID = '$ENV{JOBID}'.n";
print "Maintenant j'appelle le second programme.n";
system('perl second.pl');
print "Maintenant dans premier: JOBID = '$ENV{JOBID}'.n";
========================= =======
second.pl
========================= =======
use strict;
use warnings;
print "nAu debut du second programme: JOBID = '$ENV{JOBID}'.n";
print "Mais je change JOBID.n";
$ENV{JOBID} = '67890';
print "Maintenant: JOBID = '$ENV{JOBID}'.n";
print "Fin du second programme.nn";
========================= =======
voici le résultat quand je lance "perl premier.pl":
========================= =======
Demarrage du premier programme.
Au debut: JOBID = '12345'.
Maintenant j'appelle le second programme.
Au debut du second programme: JOBID = '12345'.
Mais je change JOBID.
Maintenant: JOBID = '67890'.
Fin du second programme.
Maintenant dans premier: JOBID = '12345'.
========================= =======
j'ai un job qui lance un script sheel, qui value des variables et qui lance un script perl.
Depuis le script perl, j'ai besoin d'une variable d'environnement du script shell (qui est exportee).
j'ai lance un simple: $jobid=`/bin/echo $JOBID` mais ma variable $jobid est vide..
qu'est ce que je rate?
Je ne connais pas les scripts shell, mais je donne un exemple entièrement écrit en perl:
premier.pl ========================= ======= use strict; use warnings;
print "Demarrage du premier programme.n";
$ENV{JOBID} = '12345';
print "Au debut: JOBID = '$ENV{JOBID}'.n"; print "Maintenant j'appelle le second programme.n";
system('perl second.pl');
print "Maintenant dans premier: JOBID = '$ENV{JOBID}'.n"; ========================= =======
second.pl ========================= ======= use strict; use warnings;
print "nAu debut du second programme: JOBID = '$ENV{JOBID}'.n"; print "Mais je change JOBID.n";
$ENV{JOBID} = '67890';
print "Maintenant: JOBID = '$ENV{JOBID}'.n"; print "Fin du second programme.nn"; ========================= =======
voici le résultat quand je lance "perl premier.pl": ========================= ======= Demarrage du premier programme. Au debut: JOBID = '12345'. Maintenant j'appelle le second programme.
Au debut du second programme: JOBID = '12345'. Mais je change JOBID. Maintenant: JOBID = '67890'. Fin du second programme.
Maintenant dans premier: JOBID = '12345'. ========================= =======
Denis
Bonjour,
Depuis le script perl, j'ai besoin d'une variable d'environnement
En perl, les variables d'environnement sont accessibles dans le tableau associatif %env (par exemple JOBID est accessible par $env{'JOBID'})
Bonne continuation,
-- Denis
Bonjour,
Depuis le script perl, j'ai besoin d'une variable d'environnement
En perl, les variables d'environnement sont accessibles dans le tableau
associatif %env (par exemple JOBID est accessible par $env{'JOBID'})
En perl, les variables d'environnement sont accessibles dans le tableau associatif %env (par exemple JOBID est accessible par $env{'JOBID'})
C'est %ENV, pas %env. Au passage, lorsque tu récupères des variables d'environnement, il faut que tu penses que ton script peut tourner un jour en mode "taint", pense-donc à toujours contrôler tes variables (dans ton cas, un =~ /^[0-9]+$/ serait correct).
-- Denis
En perl, les variables d'environnement sont accessibles dans le tableau
associatif %env (par exemple JOBID est accessible par $env{'JOBID'})
C'est %ENV, pas %env. Au passage, lorsque tu récupères des variables
d'environnement, il faut que tu penses que ton script peut tourner un
jour en mode "taint", pense-donc à toujours contrôler tes variables
(dans ton cas, un =~ /^[0-9]+$/ serait correct).
En perl, les variables d'environnement sont accessibles dans le tableau associatif %env (par exemple JOBID est accessible par $env{'JOBID'})
C'est %ENV, pas %env. Au passage, lorsque tu récupères des variables d'environnement, il faut que tu penses que ton script peut tourner un jour en mode "taint", pense-donc à toujours contrôler tes variables (dans ton cas, un =~ /^[0-9]+$/ serait correct).
-- Denis
octane
j'ai un job qui lance un script sheel, qui value des variables et qui lance un script perl.
C'est pas très clair ...
tout ca pour dire que le numero de job est genere a la volee par le
script shell. Donc je ne peux pas ecrire en dur cette variable
Depuis le script perl, j'ai besoin d'une variable d'environnement du script shell (qui est exportee).
j'ai lance un simple: $jobid=`/bin/echo $JOBID` mais ma variable $jobid est vide..
qu'est ce que je rate?
Les variables d'environnement sont disponibles dans %ENV. Il me semble que tu cherches $ENV{jobid} :
Mais pourquoi l'expression avec le /bin/echo ne fonctionne pas? si je fais un /bin/date, ca fonctionne. (note: je ne connais pas du tout le perl)
Denis
j'ai lance un simple: $jobid=`/bin/echo $JOBID` mais ma variable $jobid est vide..
Mais pourquoi l'expression avec le /bin/echo ne fonctionne pas?
Lorsque tu utilises les apostrophes inverses, tu lances /bin/sh pour exécuter ta commande, cela ne l'exécute pas dans ton shell courant : tu ne récupères donc pas l'environnement actuel, tu te contentes d'avoir celui par défaut de /bin/sh.
-- Denis
j'ai lance un simple:
$jobid=`/bin/echo $JOBID`
mais ma variable $jobid est vide..
Mais pourquoi l'expression avec le /bin/echo ne fonctionne pas?
Lorsque tu utilises les apostrophes inverses, tu lances /bin/sh pour
exécuter ta commande, cela ne l'exécute pas dans ton shell courant :
tu ne récupères donc pas l'environnement actuel, tu te contentes
d'avoir celui par défaut de /bin/sh.
j'ai lance un simple: $jobid=`/bin/echo $JOBID` mais ma variable $jobid est vide..
Mais pourquoi l'expression avec le /bin/echo ne fonctionne pas?
Lorsque tu utilises les apostrophes inverses, tu lances /bin/sh pour exécuter ta commande, cela ne l'exécute pas dans ton shell courant : tu ne récupères donc pas l'environnement actuel, tu te contentes d'avoir celui par défaut de /bin/sh.
-- Denis
Benoit Izac
Bonjour,
le 11/09/2006 à 14:28, a écrit dans le message :
j'ai lance un simple: $jobid=`/bin/echo $JOBID` mais ma variable $jobid est vide..
qu'est ce que je rate?
Les variables d'environnement sont disponibles dans %ENV. Il me semble que tu cherches $ENV{jobid} :
Mais pourquoi l'expression avec le /bin/echo ne fonctionne pas? si je fais un /bin/date, ca fonctionne.
Parce que Perl essaye d'interpréter cette variable :
% perl -e 'print `/bin/echo $TERM`'
% perl -we 'print `/bin/echo $TERM`' Name "main::TERM" used only once: possible typo at -e line 1. Use of uninitialized value in concatenation (.) or string at -e line 1.
% perl -Mstrict -we 'print `/bin/echo $TERM`' Global symbol "$TERM" requires explicit package name at -e line 1. Execution of -e aborted due to compilation errors. % perl -Mstrict -we 'print `/bin/echo $TERM`' xterm
-- Benoit Izac
Bonjour,
le 11/09/2006 à 14:28, octane@alinto.com a écrit dans le message
<1157977712.132668.186110@b28g2000cwb.googlegroups.com> :
j'ai lance un simple:
$jobid=`/bin/echo $JOBID`
mais ma variable $jobid est vide..
qu'est ce que je rate?
Les variables d'environnement sont disponibles dans %ENV.
Il me semble que tu cherches $ENV{jobid} :
Mais pourquoi l'expression avec le /bin/echo ne fonctionne pas?
si je fais un /bin/date, ca fonctionne.
Parce que Perl essaye d'interpréter cette variable :
% perl -e 'print `/bin/echo $TERM`'
% perl -we 'print `/bin/echo $TERM`'
Name "main::TERM" used only once: possible typo at -e line 1.
Use of uninitialized value in concatenation (.) or string at -e line 1.
% perl -Mstrict -we 'print `/bin/echo $TERM`'
Global symbol "$TERM" requires explicit package name at -e line 1.
Execution of -e aborted due to compilation errors.
% perl -Mstrict -we 'print `/bin/echo $TERM`'
xterm
Mais pourquoi l'expression avec le /bin/echo ne fonctionne pas? si je fais un /bin/date, ca fonctionne.
Parce que Perl essaye d'interpréter cette variable :
% perl -e 'print `/bin/echo $TERM`'
% perl -we 'print `/bin/echo $TERM`' Name "main::TERM" used only once: possible typo at -e line 1. Use of uninitialized value in concatenation (.) or string at -e line 1.
% perl -Mstrict -we 'print `/bin/echo $TERM`' Global symbol "$TERM" requires explicit package name at -e line 1. Execution of -e aborted due to compilation errors. % perl -Mstrict -we 'print `/bin/echo $TERM`' xterm
-- Benoit Izac
Paul Gaborit
À (at) 11 Sep 2006 05:28:32 -0700, écrivait (wrote):
j'ai lance un simple: $jobid=`/bin/echo $JOBID` mais ma variable $jobid est vide.. [...]
ah oui. nickel. $jobid = $ENV{'JOBID'};
Mais pourquoi l'expression avec le /bin/echo ne fonctionne pas? si je fais un /bin/date, ca fonctionne.
Parce que $JOBID est d'abord interpolé par Perl et comme ce n'est pas une variable de votre programme elle est indéfinie et donc remplacée par la chaîne vide. Un 'use warnings;' en début de programme vous aurait prévenu du bug.
Essayez : $jobid = `/bin/echo $JOBID`; et vous verrez que ça marche (même si c'est extrêmement inefficace).
Il vaut mieux utiliser %ENV pour manipuler les variables d'environnement directement,
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) 11 Sep 2006 05:28:32 -0700,
octane@alinto.com écrivait (wrote):
j'ai lance un simple:
$jobid=`/bin/echo $JOBID`
mais ma variable $jobid est vide..
[...]
ah oui. nickel.
$jobid = $ENV{'JOBID'};
Mais pourquoi l'expression avec le /bin/echo ne fonctionne pas?
si je fais un /bin/date, ca fonctionne.
Parce que $JOBID est d'abord interpolé par Perl et comme ce n'est pas
une variable de votre programme elle est indéfinie et donc remplacée
par la chaîne vide. Un 'use warnings;' en début de programme vous
aurait prévenu du bug.
Essayez :
$jobid = `/bin/echo $JOBID`;
et vous verrez que ça marche (même si c'est extrêmement inefficace).
Il vaut mieux utiliser %ENV pour manipuler les variables
d'environnement directement,
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 11 Sep 2006 05:28:32 -0700, écrivait (wrote):
j'ai lance un simple: $jobid=`/bin/echo $JOBID` mais ma variable $jobid est vide.. [...]
ah oui. nickel. $jobid = $ENV{'JOBID'};
Mais pourquoi l'expression avec le /bin/echo ne fonctionne pas? si je fais un /bin/date, ca fonctionne.
Parce que $JOBID est d'abord interpolé par Perl et comme ce n'est pas une variable de votre programme elle est indéfinie et donc remplacée par la chaîne vide. Un 'use warnings;' en début de programme vous aurait prévenu du bug.
Essayez : $jobid = `/bin/echo $JOBID`; et vous verrez que ça marche (même si c'est extrêmement inefficace).
Il vaut mieux utiliser %ENV pour manipuler les variables d'environnement directement,
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Nicolas George
"Denis" wrote in message :
Lorsque tu utilises les apostrophes inverses, tu lances /bin/sh pour exécuter ta commande, cela ne l'exécute pas dans ton shell courant : tu ne récupères donc pas l'environnement actuel, tu te contentes d'avoir celui par défaut de /bin/sh.
Non, pas du tout : l'environnement d'un processus est hérité de son processus père. Il peut ensuite être modifié, mais si ton /bin/sh modifie l'environnement au delà d'IFS quand il exécute un script, il est cassé.
"Denis" wrote in message
<1157978918.317379.206710@e3g2000cwe.googlegroups.com>:
Lorsque tu utilises les apostrophes inverses, tu lances /bin/sh pour
exécuter ta commande, cela ne l'exécute pas dans ton shell courant :
tu ne récupères donc pas l'environnement actuel, tu te contentes
d'avoir celui par défaut de /bin/sh.
Non, pas du tout : l'environnement d'un processus est hérité de son
processus père. Il peut ensuite être modifié, mais si ton /bin/sh modifie
l'environnement au delà d'IFS quand il exécute un script, il est cassé.
Lorsque tu utilises les apostrophes inverses, tu lances /bin/sh pour exécuter ta commande, cela ne l'exécute pas dans ton shell courant : tu ne récupères donc pas l'environnement actuel, tu te contentes d'avoir celui par défaut de /bin/sh.
Non, pas du tout : l'environnement d'un processus est hérité de son processus père. Il peut ensuite être modifié, mais si ton /bin/sh modifie l'environnement au delà d'IFS quand il exécute un script, il est cassé.
Denis
Bonjour,
tu ne récupères donc pas l'environnement actuel, tu te contentes d'avoir celui par défaut de /bin/sh. Non, pas du tout : l'environnement d'un processus est hérité de son
processus père.
Au temps pour moi, j'ai été trompé par ce passage de perlop :
---- qx/STRING/ `STRING` A string which is (possibly) interpolated and then executed as a system command with /bin/sh or its equivalent. Shell wildcards, pipes, and redirections will be honored. ----
J'en avais conclu qu'on exécutait /bin/sh avec son environnement par défaut. Quelqu'un sait-il où je peux signaler cette ambiguité de la perldoc ?
-- Denis
Bonjour,
tu ne récupères donc pas l'environnement actuel, tu te contentes
d'avoir celui par défaut de /bin/sh.
Non, pas du tout : l'environnement d'un processus est hérité de son
processus père.
Au temps pour moi, j'ai été trompé par ce passage de perlop :
----
qx/STRING/
`STRING`
A string which is (possibly) interpolated and then executed as a system
command with /bin/sh or its equivalent. Shell wildcards, pipes, and
redirections will be honored.
----
J'en avais conclu qu'on exécutait /bin/sh avec son environnement par
défaut. Quelqu'un sait-il où je peux signaler cette ambiguité de la
perldoc ?
tu ne récupères donc pas l'environnement actuel, tu te contentes d'avoir celui par défaut de /bin/sh. Non, pas du tout : l'environnement d'un processus est hérité de son
processus père.
Au temps pour moi, j'ai été trompé par ce passage de perlop :
---- qx/STRING/ `STRING` A string which is (possibly) interpolated and then executed as a system command with /bin/sh or its equivalent. Shell wildcards, pipes, and redirections will be honored. ----
J'en avais conclu qu'on exécutait /bin/sh avec son environnement par défaut. Quelqu'un sait-il où je peux signaler cette ambiguité de la perldoc ?