Aide sur la commande "diff"
Michel
-
[Dal] Messages postés 6373 Statut Contributeur -
[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
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:
- Aide sur la commande "diff"
- Invite de commande - Guide
- Commande terminal mac - Guide
- Diskpart commande - Guide
- Commande dism - Guide
- Commande scannow - Guide
3 réponses
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
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
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
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