2009-01-21 10 views
0

J'ai ce simple script phpphp appeler problème bash

<?php 
echo '<pre>'; 

// Outputs all the result of shellcommand "ls", and returns 
// the last output line into $last_line. Stores the return value 
// of the shell command in $retval. 
$last_line = $output = system ("~/public_html/cgi-bin/srch.sh &> ~/public_html/errors.txt",$retval); 

// Printing additional info 
echo ' 
</pre> 
<hr />Last line of the output: ' . $last_line . ' 
<hr />Return value: ' . $retval; 
?> 

qui repose sur srch.sh:

#!/bin/bash 

for i in ~/mail/home/user/mail/domain.com/josh/cur/* 
do 
grep -i Value $i . &> ~/public_html/yesno.txt; 
done 

Cependant, tout ce qui est affichage dans le b rowser est retVal 1, et pas l'erreur est enregistrée dans l'un des fichiers de texte. Ai-je mal mélangé stderr et stdout, ou manqué autre chose?

Répondre

1

$last_line = $output = system ("~/public_html/cgi-bin/srch.sh &> ~/public_html/errors.txt",$retval);

La ligne ci-dessus fonctionne srch.sh et redirige tous la sortie il produit à Errors.txt. Par conséquent, il n'y a plus de sortie à affecter à $ output (et $ last_line). Vous trouverez votre dernière ligne (avec le reste de la sortie) dans errors.txt. Si ce n'est pas le cas, essayez d'exécuter directement le script shell et voyez s'il produit une sortie quelconque.

+0

Je suis sur un serveur partagé sans accès au shell, et doit être lancé en le téléchargeant et via un navigateur, donc je ne peux pas l'exécuter directement. Absolument rien n'est stocké dans errors.txt –