Il semble que vous souhaitiez stocker toutes les différences dans une chaîne.
Si tel est le cas, la commande de la question ne va pas travailler pour quelques raisons:
Il est difficile de dire si elle est destinée ou non, mais la variable $diff
est utilisée pour Définir le nom de fichier qui stocke les différences. Peut-être que cela devrait être diff.txt
, pas $diff.txt
Le résultat de la commande est enregistrée dans diff
$diff.txt
. Il n'affiche rien dans STDOUT. Cela peut être corrigé en omettant la partie >> $diff.txt
. Si elle doit également être stocké dans le fichier, pensez à la commande tee
:
sudo diff -r dir1/ dir2/ | tee diff.txt
Lorsqu'un appel est system
affecté à une variable, elle retourne 0 en cas de succès. Pour citer la documentation:
La valeur de retour est le statut de sortie du programme tel que renvoyé par l'appel wait
.
Cela signifie que $diff
ne stocke pas les différences, mais l'état de sortie de la commande. Une approche plus sensée serait d'utiliser des backticks. Faire cela permettra $diff
pour stocker tout ce qui est STDOUT par la commande:
my $diff = `sudo diff -r dir1/ dir2/ | tee diff.txt`; # Not $diff.txt
Est-il indispensable d'utiliser la commande sudo
? Évitez d'utiliser si possible même à distance:
my $diff = `diff -r dir1/ dir2/ | tee diff.txt`; # Not $diff.txt
Une recommandation finale
Laissez un bon module CPAN prendre soin de cette tâche, que les appels backtick ne peuvent aller aussi loin. Certains ont déjà été suggérés ici; ça vaut peut-être le coup d'oeil.
Je suspecte les noms de répertoire. S'il vous plaît les poster. –
"On me demande" - est ce devoir? – Ether