【问题标题】:How do I return a Perl variable to a ksh script?如何将 Perl 变量返回到 ksh 脚本?
【发布时间】:2010-03-14 19:52:51
【问题描述】:

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

【问题讨论】:

  • Stackoverflow 不是推特或发短信,因此您可以拼出单词。善待谷歌搜索。 :)

标签: perl ipc


【解决方案1】:

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

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

perlprogram > saved.output

如果您只需要一个进程的数据,并且该进程是接下来要做的事情,则可以将 perl 输出通过管道传输到另一个进程的输入:

perlprogram | otherprogram

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

envvariable=$(perlprogram)

或者老派(复杂命令的引用问题):

envvariable=`perlprogram`

【讨论】:

    【解决方案2】:

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

    #perl script
    print someFunction();
    
    #ksh script
    perl abc.pl | ksh scrip
    

    【讨论】:

    • .ksh 在 perl 调用之前和之后做一些事情,而且它还做日志记录(见下一个答案),所以这不起作用。但这是个好主意。
    【解决方案3】:

    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 pgms? abc.pl 在第二行,'perlprogram' 在第三行。
    【解决方案4】:

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

    【讨论】:

    • 是的,这看起来像是我正在做的事情,因为到目前为止我看到的其他四个建议有更多的缺点。
    【解决方案5】:

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

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

    据我了解,您可以使用 ksh 的特殊$? 变量来读取最后一个命令的退出状态。详情请见here

    【讨论】:

    • 不,不是数字,加上 perl pgm 可以返回真正的错误代码。
    猜你喜欢
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多