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

如何将Perl变量返回到ksh脚本?,perl,ipc,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 d

我有一个调用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;

难道不能让perl脚本打印出数据,然后通过管道将数据传输到新的ksh脚本吗

#perl script
print someFunction();

#ksh script
perl abc.pl | ksh scrip

难道不能让perl脚本打印出数据,然后通过管道将数据传输到新的ksh脚本吗

#perl script
print someFunction();

#ksh script
perl abc.pl | ksh scrip

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

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

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

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

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

例如,
exit(3)
将导致Perl将值3返回到ksh


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

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

例如,
exit(3)
将导致Perl将值3返回到ksh


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

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

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

perlprogram > saved.output
如果您只需要一个进程的数据,而该进程是下一步要做的事情,那么可以通过管道将perl输出传输到另一个进程的输入:

perlprogram | otherprogram
您还可以将输出保存到环境变量中(注意,保存的是父脚本,而不是子脚本):

或老派(在复杂命令中存在引用问题):


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

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

perlprogram > saved.output
如果您只需要一个进程的数据,而该进程是下一步要做的事情,那么可以通过管道将perl输出传输到另一个进程的输入:

perlprogram | otherprogram
您还可以将输出保存到环境变量中(注意,保存的是父脚本,而不是子脚本):

或老派(在复杂命令中存在引用问题):


不,不是数字的,加上perl pgm可以返回一个真实的错误代码。不,不是数字的,加上perl pgm可以返回一个真实的错误代码。是的,这看起来是我要做的事情,因为到目前为止我看到的其他四个建议有更多的缺点。是的,这看起来是我要做的事情,由于到目前为止我看到的其他四个建议还有更多的缺点,.ksh在perl调用之前和之后都会做一些事情,而且它还会做日志记录(见下一个答案),所以这是行不通的。但是这是一个好主意。在perl调用之前和之后,.ksh都会做一些事情,而且它还会做日志记录(请参见下一个答案),所以这是行不通的。但是一个好主意。看起来您的解决方案中有两个perl PGM?abc.pl在第二行,perlprogram在第三行。看起来您的解决方案中有两个perl PGM?第二行是abc.pl,第三行是“perlprogram”。Stackoverflow不是twitter或短信,所以你可以拼写单词。善待谷歌搜索。:)Stackoverflow不是twitter或短信,所以你可以拼写单词。善待谷歌搜索。:)