Obtenir la valeur d’exécution d’une commande Unix dans le script perl

J’exécute une commande unix via un script perl pour obtenir la taille d’un répertoire.

$path = "/dir1/di2/"; system("du -sh $path"); 

Comment puis-je récupérer le résultat dans mon script Perl?

j’utilise

 $size = system("du -sh $path"); print $size 

Mais il donne la taille = 0;

un appel system renvoie le statut de l’appel, pas la sortie. Utilisez les backticks (ou l’opérateur qx ) comme:

 $size = qx(du -sh $path); 

Vous pouvez également le faire en utilisant perl , par exemple comme indiqué ici . Quelque chose comme

 use File::Find; find(sub { $size += -s if -f $_ }, $path); 

La syntaxe Perl est très similaire à celle de Bash One. Backquote votre commande et sa sortie sera stockée dans la variable.

  my $variable = `command`; print $variable; 

Si votre commande est générée sur plusieurs lignes, vous pouvez l’assigner à un tableau, par exemple:

  my @files = `ls -l` chomp @files; 

Ensuite, chaque ligne de sortie sera stockée dans un élément différent du tableau.

Comment faire un backquote peut varier en fonction de la disposition de votre clavier. Sur la mise en page américaine, c’est la même clé de tilde (~).

Il renvoie le statut de la commande, ce qui est un succès.

Au lieu de cela, faites:

 $size = `du -sh $path` 

(commande de délimitation de backquotes)

Ou vous pouvez redirect la sortie vers un descripteur de fichier et l’utiliser pour obtenir la sortie.

 open (FD,"du -hs \"$path\" |"); while () { ... } 
 #!/bin/perl $path = "/dir1/di2/"; print(qx(du -sh $path)); 

Cela devrait fonctionner!