2015-10-22 1 views
0

J'essaye d'écrire un CGI qui va écrire un fichier html afin que je n'aie pas à exécuter le script chaque fois que je veux voir l'information.Commande de script de saut de script 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>" 

Cependant, quand je dirige le navigateur à la page, la source de page, mais il n'a pas couru la commande de redirection, et ne redirigent même pas ...

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

Qu'est-ce que je fais mal? Merci!

Edit: Ceci est mon 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>" 
+0

1) Vous n'avez pas besoin de 'echo" $ (free -m) "', juste 'free -m'. 2) le script auto imprime déjà l'en-tête, donc le script cgi n'a pas à le faire. –

+0

Lorsque le script cgi s'exécute, je ne veux pas voir l'auto.sh, je veux juste qu'il soit enregistré dans un fichier html. – Tarrinr

Répondre

0

Je mettrais le code de redirection (y compris la balise de script) dans le <head> du document.

Je voudrais également modifier le script bash afin qu'il mette la destination entre guillemets (en donnant la sortie comme) window.location.href="../secure/status.html"; Les guillemets simples sont également corrects. Il semble que votre utilisation de guillemets bash ne cite pas les éléments comme vous essayez de le faire. Enfin, si vous voulez que l'utilisateur voit réellement les mots "Redirection", vous devez invoquer une sorte de retard dans le code javascript.

Essayez: echo "<script type='text/javascript'>window.location.href='../secure/status.html';</script>"

Je pris une petite partie de votre fichier auto.sh puis redirigé la sortie vers un fichier.

#!/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>" 

Notez les guillemets simples dans la ligne href.

Ensuite, j'exécuté ceci sur la ligne de commande: sh auto.sh > status.html

Enfin, je cat status.html et ai exécuté ce ...

<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> 

Est-ce que vous essayez de le faire?

+0

Dans mon script, je l'ai entre guillemets, la source de la page ne les affiche pas. J'ai déplacé ma ligne de redirection dans la tête, mais ça n'a rien fait ... – Tarrinr

+0

Avec le code mis à jour, la redirection de la page? –

+0

Non, il agit comme avant ... – Tarrinr