我正在尝试将命令输出的内容重定向到 CGI 程序中的文件。对我来说问题是输出文件没有被创建。
CGI代码片段如下:
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "<html>"
echo "<body>"
`mysql -u root -predhat -H -D mysql -e "select host,db from db;" > output.txt`
echo "</body>"
echo "</html>"
CGI 脚本是从 HTML 程序调用的。另外,我可以INTO OUTFILE
与mysql
命令一起使用,但我希望输出重定向应该适用于任何命令。
所有权如下:
#ls -l /var/www/cgi-bin/example.sh
-rwxr-xr-x 1 root root 839 Apr 11 21:34 /var/www/cgi-bin/example.sh
# ps -ef | grep httpd root 2442 1 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2464 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2465 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2466 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2467 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd apache 2468 2442 0 19:30 ? 00:00:00 /usr/sbin/httpd
我该如何解决这个问题?
答案1
首先是这个脚本设置,以便运行您的 Web 服务器(我猜是 Apache)的用户可以执行它?您可以通过查看脚本的权限来检查:
$ ls -l somescript.cgi
-rwxrwxr-x. 1 apache apache 1199 Jan 17 20:47 somescript.cgi
您需要这样的权限,以便任何人都可以运行它,或者如果该脚本由用户拥有apache
,那么至少只有所有者可以执行它。
如果是这种情况,那么接下来我将关注命令输出的位置mysql
。 Apache 可能无法写入mysql
尝试写入文件的位置output
。我会将其设置为一个实际的物理位置,如下所示:
mysql -u root -predhat -H -D mysql -e "select host,db from db;" \
> /tmp/output.txt
而且反引号是不必要的,所以你可以把它们去掉。