CGI脚本跳过源命令
CGI script skipping source command
我正在尝试编写一个将写入 html 文件的 cgi,这样我就不必在每次要查看信息时都 运行 脚本。
#!/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>"
然而,当我将浏览器定向到该页面时,页面源显示了这一点,但它没有 运行 重定向命令,甚至没有重定向...
<HTML>
<head><title>Status</title></head>
<body>
Redirecting...
<script language=javascript>window.location.href = ../secure/status.html;</script>
</body></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>"
我会将重定向代码(包括脚本标记)放在文档的 <head>
中。
我还会修改 bash 脚本,以便将目标放在双引号中(将输出呈现为)window.location.href="../secure/status.html";
单引号也可以。看来您的 bash 脚本使用引号并没有像您尝试的那样引用项目。
最后,如果您希望用户真正看到单词 "Redirecting",您应该在 javascript 代码中调用某种时间延迟。
尝试:
echo "<script type='text/javascript'>window.location.href='../secure/status.html';</script>"
我取了你 auto.sh 文件的一小部分,然后将其输出重定向到一个文件。
#!/bin/bash
# subset of your file auto.sh
echo "<HTML><head><title>Status</title></head><body><pre>"
echo "$(date)"
echo ""
FAILED="Failed"
ACCEPTED="Accepted"
BAN="Ban"
echo "##########FAILED##########"
echo "$FAILED"
echo ""
echo "##########ACCEPTED##########"
echo "$ACCEPTED"
echo ""
echo "##########BANNED##########"
echo "$BAN"
echo ""
echo '<a href="../cgi-bin/status.cgi">Refresh</a>'
echo "</pre></body></HTML>"
注意 href 行中的单引号。
然后,我在命令行上执行了这个:
sh auto.sh > status.html
最后,我执行了 cat status.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>
这是你想要做的吗?
我正在尝试编写一个将写入 html 文件的 cgi,这样我就不必在每次要查看信息时都 运行 脚本。
#!/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>"
然而,当我将浏览器定向到该页面时,页面源显示了这一点,但它没有 运行 重定向命令,甚至没有重定向...
<HTML>
<head><title>Status</title></head>
<body>
Redirecting...
<script language=javascript>window.location.href = ../secure/status.html;</script>
</body></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>"
我会将重定向代码(包括脚本标记)放在文档的 <head>
中。
我还会修改 bash 脚本,以便将目标放在双引号中(将输出呈现为)window.location.href="../secure/status.html";
单引号也可以。看来您的 bash 脚本使用引号并没有像您尝试的那样引用项目。
最后,如果您希望用户真正看到单词 "Redirecting",您应该在 javascript 代码中调用某种时间延迟。
尝试:
echo "<script type='text/javascript'>window.location.href='../secure/status.html';</script>"
我取了你 auto.sh 文件的一小部分,然后将其输出重定向到一个文件。
#!/bin/bash
# subset of your file auto.sh
echo "<HTML><head><title>Status</title></head><body><pre>"
echo "$(date)"
echo ""
FAILED="Failed"
ACCEPTED="Accepted"
BAN="Ban"
echo "##########FAILED##########"
echo "$FAILED"
echo ""
echo "##########ACCEPTED##########"
echo "$ACCEPTED"
echo ""
echo "##########BANNED##########"
echo "$BAN"
echo ""
echo '<a href="../cgi-bin/status.cgi">Refresh</a>'
echo "</pre></body></HTML>"
注意 href 行中的单引号。
然后,我在命令行上执行了这个:
sh auto.sh > status.html
最后,我执行了 cat status.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>
这是你想要做的吗?