2010-03-14 6 views
1

J'ai un script ksh qui appelle un programme Perl. Le programme Perl crée des données importantes sur lesquelles le script ksh doit agir. Exemple:Comment retourner une variable Perl à un script ksh?

Mon programme ksh:

#!/usr/bin/ksh 
abc.pl > $logFile 
# perl pgm creates variable $importantData See below. 
# HOW DO I GET THE .KSH SCRIPT TO SEE $importantData ??? 
def.ksh $importantData # send important data to another .ksh script 
exit 

programme Perl My:

$importantData = somefunction(); 
exit; 
+0

Qu'est-ce qu'un "pgm"? – Svante

+0

Abréviation de 'programme'. –

+0

Stackoverflow n'est pas twitter ou texto, de sorte que vous pouvez épeler des mots. Soyez gentil avec les recherches Google. :) –

Répondre

0

ne pouvait pas vous avez juste l'impression de script perl les données, puis envoyer les données à la nouvelle ksh script

#perl script 
print someFunction(); 

#ksh script 
perl abc.pl | ksh scrip 
+0

Le .ksh fait des choses avant, et après, l'appel perl, et, aussi, il enregistre (voir la réponse suivante), donc cela ne fonctionnera pas. Mais une bonne idée. –

0

Le programme Perl doit imprimer la variable. Le script KSH capture la sortie.

Perl ...

$importantData = somefunction(); 
print $importantData; 
exit 

KSH ...

#!/usr/bin/ksh 
abc.pl > $logFile 
importantData=$(perlprogram) 
def.ksh $importantData # send important data to another .ksh script 
exit 
+0

On dirait que vous avez deux perl pgms dans votre solution? abc.pl dans la deuxième ligne, et «perlprogram» dans la troisième ligne. –

0

Si vous ne pouvez pas utiliser la sortie standard ou erreur standard pour fournir $ ASPECT, vous pouvez utiliser un fichier temporaire.

+0

Oui, cela ressemble à la voie à suivre, pour ce que je fais, car il y a plus d'inconvénients aux quatre autres suggestions que je vois à ce point. –

0

Si la valeur est numérique, vous pouvez la renvoyer à l'aide de la fonction exit() de Perl, qui apparaîtra comme le code d'état de Perl. Par exemple, exit(3) provoquera Perl à renvoyer la valeur 3 à ksh. Par exemple, exit(3) Pour autant que je sache, vous pouvez utiliser la variable spéciale $? de ksh pour lire le statut de sortie de la dernière commande. Voir here pour plus de détails.

+1

Non, pas numérique, plus le perg pgm peut retourner un vrai code d'erreur. –

1

Sur les systèmes * nix, un processus enfant ne peut pas modifier l'environnement de son parent. Si vous concevez votre script perl pour imprimer les données importantes en standard, vous aurez plusieurs façons de les capturer pour un traitement ultérieur.

Le plus simple est de rediriger la sortie vers un fichier pour un traitement ultérieur:

perlprogram > saved.output 

Si vous avez seulement besoin des données pour un processus, et ce processus est la prochaine chose à faire, vous pouvez diriger le perl sortie à l'entrée de l'autre processus:

perlprogram | otherprogram 

Vous pouvez également enregistrer la sortie dans une variable d'environnement (notez le script parent fait l'économie et non l'enfant):

envvariable=$(perlprogram) 

ou vieille école (qui a cité des problèmes avec des commandes complexes):

envvariable=`perlprogram` 
Questions connexes