在perl / cgi文件中运行system命令时缺少输出

时间:2010-03-31 14:43:08

标签: perl command-line variables shell cgi

我需要编写一个CGI程序,它将显示系统命令的输出:

script.sh

echo "++++++"  
VAR=$(expect -c " spawn ssh -o StrictHostKeyChecking=no $USER@$HOST $CMD match_max 
100000 expect \"*?assword:*\" send -- \"$PASS\r\" send -- \"\r\" expect eof ") 
echo $VAR 
echo "++++++"

在CGI文件中:

my $command= "ksh ../cgi-bin/script.sh";
my @output= `$command`; 
print @output;

最后,当我在unix中运行CGI文件时,$VAR是一个非常长的字符串,包括\ n和一些分隔符。但是,当我在Web服务器上运行时,输出是

++++++

++++++

传递Web界面/浏览器时,$VAR丢失了。 我知道问题可能是$VAR非常长的字符串。

但无论如何,除了将输出写入文件然后从浏览器中检索外,是否还有解决此问题的方法?

如果您对我的问题感兴趣,谢谢。

2 个答案:

答案 0 :(得分:1)

script.sh使用了多个环境变量:$USER$HOST$CMD$PASS。 CGI环境将具有与登录shell不同的环境变量集。在调用script.sh之前,您可能需要从CGI脚本中设置这些变量。

答案 1 :(得分:0)

尝试在系统中查找您正在调用的命令和ssh等命令,并将其目录路径添加到脚本使用的PATH中。 即。

which expect

返回/ usr / bin / expect然后添加以下行:

PATH=$PATH:/usr/bin && export PATH

靠近ksh脚本的开头。在调试期间,您可能还希望通过将2> /tmp/errors.txt附加到命令的末尾来将stderr重定向到文件,因为浏览器中未显示stderr。

my $command= "ksh ../cgi-bin/script.sh 2>/tmp/errors.txt";