Bash CGI脚本跳过源命令

Bash CGI脚本跳过源命令,bash,shell,cgi,Bash,Shell,Cgi,我正在尝试编写一个cgi,它将编写一个html文件,这样我就不必每次都运行脚本来查看信息 #!/bin/bash echo "Content-type: text/html" echo "" echo "<HTML>" echo "<head><title>Status</title></head>" echo "<body>" ./auto.sh > ../secure/status.html echo "Redi

我正在尝试编写一个cgi,它将编写一个html文件,这样我就不必每次都运行脚本来查看信息

#!/bin/bash

echo "Content-type: text/html"
echo ""
echo "<HTML>"
echo "<head><title>Status</title></head>"
echo "<body>"
./auto.sh > ../secure/status.html
echo "Redirecting..."
echo "<script language="javascript">window.location.href="../secure/status.html";</script>"
echo "</body></HTML>"
#/bin/bash
echo“内容类型:文本/html”
回声“”
回声“”
回显“状态”
回声“”
./auto.sh>。/secure/status.html
回声“重定向…”
echo“window.location.href=“../secure/status.html”
回声“”
然而,当我将浏览器指向页面时,页面源代码显示了这一点,但它没有运行重定向命令,甚至没有重定向

<HTML>
<head><title>Status</title></head>
<body>
Redirecting...
<script language=javascript>window.location.href = ../secure/status.html;</script>
</body></HTML>

地位
重定向。。。
window.location.href=../secure/status.html;
我做错了什么? 谢谢

编辑:这是我的auto.sh

#!/bin/bash

echo "<HTML><head><title>Status</title></head><body><pre>"
echo "$(date)"
echo ""
FAILED=$(sudo cat /var/log/secure | grep "$(date +"%b %d")" | grep "sshd" | grep "Failed")
ACCEPTED=$(sudo cat /var/log/secure | grep "$(date +"%b %d")" | grep "sshd" | grep "Accepted")
SPEED=$(python /script/speedtest-cli --server 4128 | grep "Download:\|Upload:")
BAN=$(sudo cat /var/log/fail2ban.log | grep "$(date +"%Y-%m-%d")" | grep "Ban")

echo "##########FAILED##########"
echo "$FAILED"
echo ""
echo "##########ACCEPTED##########"
echo "$ACCEPTED"
echo ""
echo "##########BANNED##########"
echo "$BAN"
echo ""
echo "##########SPEED##########"
echo "$SPEED"
echo ""
echo "##########STORAGE##########"
echo "$(df -h)"
echo ""
echo "##########MEMORY##########"
echo "$(free -m)"
echo ""
echo "<a href="../cgi-bin/status.cgi">Refresh</a>"
echo "</pre></body></HTML>"
#/bin/bash
回显“状态”
回显“$(日期)”
回声“”
失败=$(sudo cat/var/log/secure | grep“$(日期+%b%d”)“| grep“sshd”| grep“失败”)
已接受=$(sudo cat/var/log/secure | grep“$(日期+%b%d”)“| grep“sshd”| grep“已接受”)
速度=$(python/script/speedtest cli--server 4128 | grep“下载:\\\上传:)
BAN=$(sudo cat/var/log/fail2ban.log | grep“$(日期+%Y-%m-%d”)“| grep“BAN”)
回声“失败”
回显“$FAILED”
回声“”
回音“接受”
回显“$已接受”
回声“”
回声“禁止”
回音“$BAN”
回声“”
回声“速度”
回声“$SPEED”
回声“”
echo“############################”
回声“$(df-h)”
回声“”
回声“记忆”
echo“$(免费-m)”
回声“”
回声“”
回声“”

我会将重定向代码(包括脚本标记)放在文档的

我还将修改bash脚本,使其将目标放在双引号中(将输出呈现为)
window.location.href=“../secure/status.html”
单引号也可以。看起来bash脚本使用引号并不像您尝试的那样引用条目

最后,如果您想让用户真正看到“重定向”这个词,您应该在javascript代码中调用某种时间延迟

尝试:
echo“window.location.href=”../secure/status.html';“

我获取了auto.sh文件的一小部分,然后将其输出重定向到一个文件

<HTML><head><title>Status</title></head><body><pre>
Thu, Oct 22, 2015  3:09:43 PM

##########FAILED##########
Failed

##########ACCEPTED##########
Accepted

##########BANNED##########
Ban

<a href="../cgi-bin/status.cgi">Refresh</a>
</pre></body></HTML>

这就是你想要做的吗?

在我的实际脚本中,我用双引号引用了它,页面源代码没有显示它们。我把我的重定向行移到了头部,但它没有做任何事情…我尝试了单引号,现在它重定向了!!谢谢它仍然没有写入status.html tho…根据您最初的帖子,我阅读了一个手册页面,因为我以前从未听说过
tee
命令。在参考页中,它确实指示
tee
写入文件。由于我还没有使用tee,我总是通过回显一些文本和重定向来编写文件,使用单个大于号
进行覆盖,或者使用双大于号
>
进行附加。是否可能您同时(或接近它)尝试向文件添加文本
auto.sh
的输出是否被重定向到同一文件?也许信息是无意中写的。人力资源经理,我不知道我是否明白你的意思。。。我认为只有一件事与html文件有关?有没有更好的办法?我只是尝试将输出发送到一个文件,这样我就不必每次查看脚本时都运行它。1)您不需要
回显“$(free-m)”
,只需执行
free-m
。2) auto脚本已经打印出了标题,所以cgi脚本不必打印。当cgi脚本运行时,我不想看到auto.sh,我只想将它保存到html文件中。
<HTML><head><title>Status</title></head><body><pre>
Thu, Oct 22, 2015  3:09:43 PM

##########FAILED##########
Failed

##########ACCEPTED##########
Accepted

##########BANNED##########
Ban

<a href="../cgi-bin/status.cgi">Refresh</a>
</pre></body></HTML>