Wget peut-il retourner true ou false (0 ou 1)

salut tout le monde je veux vraiment savoir si wget peut retourner true ou false (0 ou 1) seulement après avoir traité certaines URL. Mon idée est de créer un petit script PERL pour surveiller quelques pages Web et envoyer des e-mails ou une sorte d’alerte (je suis toujours en processus de développement). Voici ce que j’ai jusqu’ici:

#!usr/bin/perl use ssortingct; use warnings; #use LWP::Simple; my $url='google.com'; system('wget --delete -q $url'); print "$?"; if($? != 0 ) { print "false\n"; } else { print "OK\n"; } 

Ce n’est que le début, mais j’essaie de le rendre le plus silencieux possible, le moins possible étant le meilleur. Ceci est ma sortie maintenant: Essayez wget –help pour plus d’options. 256 false Toute aide sera appréciée. Il ne faut pas non plus être wget mais c’est ce que je sais jusqu’ici.

$url n’est pas interpolé dans un littéral de chaîne entre guillemets, vous avez donc exécuté la commande shell

 wget --delete -q $url 

À moins qu’il y ait une variable d’environnement url , cela exécute la commande wget avec les deux parameters --delete et -q . Wget se plaint d’une “URL manquante” (vous avez omis certaines lignes d’erreur) et renvoie le code d’état 1.

La variable $? contient le code d’état de la commande, multiplié par 256. Plus précisément, il s’agit de la valeur renvoyée par l’ appel du système d’ wait . Avoir $? égal à zéro indique le succès, vous avez bien compris cette partie. L’échec peut être un code autre que 1: toute valeur non nulle indique une défaillance.

Si vous ne voulez voir absolument aucune sortie, redirigez la sortie et les erreurs vers /dev/null :

 system("wget --delete -q $url >/dev/null 2>/dev/null"); 

Cacher les erreurs est une mauvaise idée: si vous faites cela, vous ne pouvez pas les diagnostiquer. Vous pouvez désactiver la sortie normale sans cacher les erreurs en redirigeant uniquement la sortie standard. Mais l’option -q de wget le fait déjà.

 system("wget --delete -q $url"); if ($?) { print "false\n"; } else { print "OK\n"; } 

Ce code suppose que $url ne contient aucun caractère spécial de shell. Si vous ne pouvez pas le garantir, protégez tous les caractères spéciaux du shell:

 system('wget --delete -q ' . quotemeta($url) . ' >/dev/null 2>/dev/null'); 

ou, si vous n’ignorez pas les messages d’erreur, ignorez le shell en utilisant la forme multi-arguments du system :

 system('wget', '--delete', '-q ', $url);