Aide sur la commande "diff"

Michel -  
[Dal] Messages postés 6373 Statut Contributeur -
Bonjour tout le monde,

J'ai un petit souci qui m'embête et me prend la tête depuis deux heures, je ne parviens pas à comprendre pourquoi, si vous pourriez me donner un coup de pouce et m'éclairer je vous en remercie d'avance. :)

Voilà le problème :
J'ai une ligne de commande qui fonctionne très bien sous un shell
$diff -hbr Repertoire1 Repertoire2 >> log.txt

Et la même commande dans un script perl ne fonctionne pas :'(
le fichier log.txt reste toujours vide :'( le bout de code est le suivant :
system("diff -hbr Repertoire1 Repertoire2 >> log.txt");

Pourriez vous m'éclairer s'il vous plait ?

Merci bien

Michel
A voir également:

3 réponses

Michel
 
j'ai trouvé une solution qui fonctionne (un poil barbare je trouve mais bon...)

open(DIFF, "diff -hbr $row $destDir/$curFolder 3>&1 1>&2 2>&3 3>&-|");

while($diffOutput = <DIFF>){
print "$diffOutput\n";
}

close(DIFF);

Merci bien

P.S.: si qqun a une réponse pourquoi le truc tout simple de system ne fonctionne pas, je suis preneur. Merci encore
0
[Dal] Messages postés 6373 Statut Contributeur 1 106
 
Salut Michel,

La commande "system" ne te permet pas de récupérer la sortie standard d'un programme, seulement le code de résultat d'exécution (vois "man perlfunc" et la commande "system").

Pour récupérer le "standard output" de ta commande utilise les "backsticks" (touche Alt-7), comme çà :

$diffoutput = `diff -hbr Repertoire1 Repertoire2`;

Ensuite, tu fais ce que tu veux de $diffoutput.

Ou tu fais directement `diff -hbr Repertoire1 Repertoire2 >> log.txt`;

La solution "open" est utile si tu veux traiter chaque ligne de la sortie standard dans ton programme Perl.


Dal
0
[Dal] Messages postés 6373 Statut Contributeur 1 106
 
... pour ta solution "open", il doit y avoir plus simple :

$pid = open(FICH, "commande 2>/dev/null |");
while (<FICH>) { print "$_"; }
close(FICH);


Celà t'ouvre un flux avec stdout à l'exclusion de stderr. Si tu veux tout, tu retires "2>/dev/null".


Dal
0