Rechercher : dans
Par :

Aide sur la commande "diff"

Dernière réponse le 4 mai 2005 à 18:57:19 Michel, le 4 mai 2005 à 15:07:46 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « Aide sur la commande "diff" » dans :
Liste des commandes Windows VoirRemarques : Certaines commandes sont dangereuses (l’exemple de SYSKEY) et peuvent causer des problèmes pouvant conduire au formatage. D’autres commandes ne sont pas exécutables sous Windows XP ou des versions antérieures, je ne les ai pas...
[MS-Dos] Commandes DOS de base VoirCes commandes sont des commandes de base que vous pouvez utiliser dans un prompt DOS, par exemple, sur une disquette de démarrage. Pour obtenir plus d'informations sur ces commandes, tapez (dans un prompt DOS), le nom de votre commande suivi de...
Commandes IP relatives aux réseaux sous Windows VoirIl est parfois très utile de connaître les commandes IP, pour analyser voire configurer ses réseaux TCP/IP. Voici la liste de ces commandes à utiliser dans une fenêtre DOS...
Commandes Linux VoirTableau des principales commandes Linux Commande Description équivalent DOS ls liste le contenu d'un répertoire dir cd change de répertoire cd cd .. répertoire parent cd.. mkdir crée un nouveau...
Commandes UNIX VoirTableau des principales commandes UNIX Commande Unix Description Options ls liste le contenu d'un répertoire -a Affiche tous les fichiers, y compris les fichiers cachés ...
Les commandes AS/400 VoirLes commandes de l’AS/400 Il existe environ un millier de commandes dans l'OS/400, regroupées sous le nom de « Langage de Contrôle ». Un utilisateur pourra les lancer depuis la ligne Option ou Commande située au bas de l'écran, quand celle-ci est...

1

Michel, le 4 mai 2005 à 15:32:50

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

Répondre à Michel

2

[Dal], le 4 mai 2005 à 18:33:02

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

Répondre à [Dal]

3

 [Dal], le 4 mai 2005 à 18:57:19

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

Répondre à [Dal]