我需要编写一个CGI程序,它将显示系统命令的输出:
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
非常长的字符串。
但无论如何,除了将输出写入文件然后从浏览器中检索外,是否还有解决此问题的方法?
如果您对我的问题感兴趣,谢谢。
答案 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";