在perl/cgi文件中运行系统命令时缺少输出
我需要编写一个CGI程序,它将显示系统命令的输出: script.sh 在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丢失。 我知道问题
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";