在Perl运行系统命令时缺少输出/ CGI文件(Missing output when runnin

2019-10-29 03:25发布

我需要编写一个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服务器上运行时,输出为

++++++

++++++

所以, $VAR传入网络接口/浏览器的时候丢失了。 我也许知道问题是$VAR是很长的字符串。

但不管怎么说,反正是有解决这个问题,除了输出写入文件,然后从浏览器找回?

谢谢如果你有兴趣在我的问题。

Answer 1:

script.sh使用几个环境变量: $USER$HOST$CMD$PASS 。 CGI环境将有超过设定登录shell不同的环境变量。 您可能需要调用之前设置从CGI脚本这些变量script.sh



Answer 2:

试着找到其中相似的命令,希望和您呼叫的是您系统上的SSH和增加他们的目录路径通过脚本使用的路径。 即

which expect

返回的/ usr / bin中/指望再添加一行:

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

附近的KSH脚本的开头。 在调试你可能还需要因为在浏览器中不显示标准错误追加2> /tmp/errors.txt到命令结束到stderr重定向到一个文件。

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


文章来源: Missing output when running system command in perl/cgi file