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

在perl/cgi文件中运行系统命令时缺少输出,perl,command-line,variables,shell,cgi,Perl,Command Line,Variables,Shell,Cgi,我需要编写一个CGI程序,它将显示系统命令的输出: script.sh 在CGI文件中: my $command= "ksh ../cgi-bin/script.sh"; my @output= `$command`; print @output; 最后,在unix中运行CGI文件时,$VAR是一个非常长的字符串,包括\n和一些分隔符。但是,当我在web服务器上运行时,输出是 ++++++ ++++++ ++++++ ++++++ 因此,传入web界面/浏览器时,$VAR丢失。 我知道问题

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

script.sh 在CGI文件中:

my $command= "ksh ../cgi-bin/script.sh";
my @output= `$command`; 
print @output;
最后,在unix中运行CGI文件时,
$VAR
是一个非常长的字符串,包括\n和一些分隔符。但是,当我在web服务器上运行时,输出是

++++++ ++++++ ++++++ ++++++ 因此,传入web界面/浏览器时,
$VAR
丢失。 我知道问题可能是
$VAR
是一个很长的字符串

但无论如何,除了将输出写入文件然后从浏览器中检索外,还有其他方法可以解决这个问题吗


感谢您对我的问题感兴趣。

script.sh
使用了几个环境变量:
$USER
$HOST
$CMD
$PASS
。CGI环境将设置与登录shell不同的环境变量。在调用
script.sh

之前,您可能需要从CGI脚本中设置这些变量。请尝试查找您正在调用的expect和ssh等命令在系统中的位置,并将它们的目录路径添加到脚本使用的路径中。 即

返回/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";

您是否尝试过以Web服务器运行的用户身份运行script.sh?是的,输出如上所述。您认为将输出写入临时文件然后在cgi文件中读取是避免上述问题的一种好方法。感谢您指出这一点。my$command=“ksh../cgi-bin/script.sh$USER@$HOST$CMD”;但我仍然得到相同的输出,缺少$VAR
PATH=$PATH:/usr/bin && export PATH
my $command= "ksh ../cgi-bin/script.sh 2>/tmp/errors.txt";