[英]Pass Perl array to bash script
我正在尝试使用Perl脚本连接到Footprints API。 我正在使用Perl,因为那是Footprints API可以使用的几种语言之一。
我希望这个Perl脚本从Footprints收集数据,将数据放置在数组中,然后将该数组传递回调用它的Shell脚本。
如何将数组从Perl脚本传递到bash脚本?
下面是用于连接到Footprints API并收集数据的模板。
模板:
use strict;
use SOAP::Lite;
my $USE_PROXY_SERVER = 1;
my $soap = new SOAP::Lite;
$soap->uri( 'http://fakeserver.phoneycompany.com/MRWebServices' );
if ( $USE_PROXY_SERVER ) {
$soap->proxy(
'http://fakeserver.phoneycompany.com/MRcgi/MRWebServices.pl',
proxy => ['http' => 'http://localhost:8888/'] );
}
else {
$soap->proxy( 'http://fakeserver.phoneycompany.com/MRcgi/MRWebServices.pl' );
}
my $soapenv = $soap->MRWebServices__search(
'WebServices',
'fakepassword',
'',
"select mrID, mrTITLE from MASTER78 WHERE mrTITLE LIKE '%of%'"
);
my $result;
if ( $soapenv->fault ) {
print ${$soapenv->fault}{faultstring} . "\n";
exit;
}
else {
$result = $soapenv->result;
}
my @result_list = @{$result};
for ( my $i = 0; $i <= $#result_list; $i++ ) {
print "RESULT $i\n";
my $hash_ref = $result_list[$i];
foreach my $item ( keys %{$hash_ref} ) {
my $val = $hash_ref->{$item};
print "$item = '$val'\n";
}
print "---------------------\n";
}
在模板中,我认为它只是将键/值对打印到stdout。
我是Perl的新手,仅使用它来搜索Footprints API。 我不确定您是否可以使用bash脚本以某种方式从stdout捕获该数据,或者是否必须做一个数组或该数组的字符串表示形式并返回它。
在我的bash脚本中,我将把Perl脚本的结果分配给一个变量,例如VAR=(perl perl_script.pl)
。 但是我不知道如何对数组执行此操作,这就是为什么我要考虑数组的字符串表示形式,将其分配给变量,然后在bash中对其进行解析。
我不知道如何在Perl中进行设置,因此我需要帮助。
简短的答案是-您不能在程序之间传递数据结构。
您可以只传递文本(和二进制内容,但我建议您不要在这里这样做)。
最简单的方法之一就是使用现有的数据交换格式,例如JSON:
use JSON;
print to_json(\@result_list);
然后手动在 bash脚本中解码JSON表单。
或者只是知道,请在perl
完成所有工作。 没什么不同。
通常,在这种情况下,我可能会选择“在X上完成所有工作”,其中X比shell先进得多,但我不得不这样做一两次。 主要是因为我正在建立一个交互式外壳环境。
我最后要做的是与ssh-agent -s
类的工具一样的事情:构建将导致根据需要设置环境的shell命令,然后让父shell评估它们,例如:
eval $(perl perl_script.pl)
只要注意确保每个单独的命令被分隔;
因为\\n
通常是被压缩的。
另一个替代方法是,将其输出到新文件,并允许父批处理文件call
它(或者在shell中,它是source
,我不太喜欢它,但是在为Windows的批处理文件生成变量时使用了该方法。它)。 如果可以避免使用临时文件,我不太喜欢使用临时文件,尽管这样可以使调试工作更加容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.