使用backticks对ruby脚本的perl调用不会返回任何结果

使用backticks对ruby脚本的perl调用不会返回任何结果,perl,asterisk,agi,Perl,Asterisk,Agi,好的,我有一个ruby脚本,它从FM服务器获取一些数据并返回一个元组。我不得不这么做,因为我知道没有好的perl FM模块 [test.pl] $ret = `ruby /root/rfm-query.rb $cid`; @extens = split(/,/, $ret, 2); print "DIAL SIP/$extens[0]"; $ret=`ruby/root/rfm-query.rb$cid`; @扩展=拆分(/,/,$ret,2); 打印“拨号SIP/$extens[0]”; 因此

好的,我有一个ruby脚本,它从FM服务器获取一些数据并返回一个元组。我不得不这么做,因为我知道没有好的perl FM模块

[test.pl]

$ret = `ruby /root/rfm-query.rb $cid`; @extens = split(/,/, $ret, 2); print "DIAL SIP/$extens[0]"; $ret=`ruby/root/rfm-query.rb$cid`; @扩展=拆分(/,/,$ret,2); 打印“拨号SIP/$extens[0]”; 因此,当我运行此命令时,它将按预期打印“DIAL SIP/215”,但在星号AGI脚本中使用相同的代码并使用$extens[0]时,它总是不返回任何内容

#!/usr/bin/env perl use Asterisk::AGI; $|=1; $AGI = new Asterisk::AGI; %input = $AGI->ReadParse(); $cid = substr $input{'callerid'}, 1; $cid =~ s/\+//g; $ret = `ruby /root/rfm-query.rb $cid`; #rets nothing @extens = split(/,/, $ret, 2); $AGI->exec("DIAL SIP/$extens[0]"); #!/usr/bin/env perl 使用星号::AGI; $|=1; $AGI=新星号::AGI; %输入=$AGI->ReadParse(); $cid=substr$input{'callerid'},1; $cid=~s/\+//g; $ret=`ruby/root/rfm-query.rb$cid`#没什么 @扩展=拆分(/,/,$ret,2); $AGI->exec(“拨号SIP/$extens[0]”);
为什么它可以在测试脚本中工作,而不能在AGI中工作?

我不确定Asterix AGI脚本是什么,但如果它类似于CGI,即您的代码由服务器运行,那么它可能会以与您不同的用户身份运行。希望它是而不是root,并且它可能无法读取
/root/rfm query.rb

您可以通过尝试打开并打印文件进行读取来检查这一点

my $rfm_query_file = "/root/rfm-query.rb";
open my $fh, "<", $rfm_query_file or die "Cant open $rfm_query_file: $!";
my$rfm\u query\u file=“/root/rfm query.rb”;

打开我的$fh,“你想做什么就做什么?我看了一下Net::FileMaker,文档似乎很糟糕。我不确定它是否满足我的需要。@mu是的,它们都作为同一个用户运行。我不能告诉你美元是多少?当它失败时,因为我不知道如何让AGI脚本将文本输出到Asterisk控制台。Asterisk与它自己的用户一起运行,所以我尝试将ruby脚本放入该用户的目录中,但仍然无法工作。我不明白为什么它在通过AGI运行时无法正常工作,但在CLI上作为常规perl脚本运行时却可以正常工作。脚本可以读取文件吗?另外,脚本中的STDERR可能会进入某个日志文件中,而您却看不到它。您可以使用ruby/root/rfm-query.rb$cid 2>&1
捕获它。也有可能
$cid
不是您所认为的那样。它可能有空格和shell元字符,这导致命令行不正确。我不知道,因为我无法让它在星号控制台上输出任何内容供我查看。如果$cid不是我所期望的,那么为什么它在包含相同代码的其他脚本中工作?好的,谢谢。添加2>&1向我展示了问题所在。它无法找到ruby脚本。