如何将Perl变量返回到ksh脚本?

时间:2010-03-14 19:52:51

标签: perl ipc

我有一个调用Perl程序的ksh脚本。 Perl程序创建了一些ksh脚本需要处理的重要数据。例如:

我的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

我的Perl计划:

$importantData = somefunction();
exit;

5 个答案:

答案 0 :(得分:1)

在* nix系统上,子进程无法修改其父进程的环境。如果您设计perl脚本以将重要数据打印到标准输出,那么您将有几种方法来捕获它以供以后处理。

最简单的方法是将输出重定向到文件以供以后处理:

perlprogram > saved.output

如果您只需要一个进程的数据,并且该进程是下一步要做的事情,您可以将perl输出传递给另一个进程的输入:

perlprogram | otherprogram

您还可以将输出保存到环境变量中(请注意,父脚本正在执行保存而不是子项):

envvariable=$(perlprogram)

或旧学校(引用复杂命令的问题):

envvariable=`perlprogram`

答案 1 :(得分:0)

难道你不能让perl脚本打印出数据然后将数据传输到新的ksh脚本

#perl script
print someFunction();

#ksh script
perl abc.pl | ksh scrip

答案 2 :(得分:0)

Perl程序应该打印变量。 KSH脚本捕获输出。

...的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

答案 3 :(得分:0)

如果您无法使用标准输出或标准错误来提供$ importantData,则可以使用临时文件。

答案 4 :(得分:0)

如果值是数字,则可以使用Perl的exit()函数返回它,该函数将显示为Perl的状态代码。

例如,

exit(3)将导致Perl将值3返回给ksh。

据我了解,您可以使用ksh的特殊$?变量来读取最后一个命令的退出状态。有关详细信息,请参阅here