comment trouver le dernier état de commande exécuté dans la boucle foreach dans perl

J’ai un morceau de logique qu’il va exécuter le service de démarrage un par un basé sur la liste des serveurs maintenant la question est après l’exécution réussie du dernier serveur j’ai besoin de faire une action basée sur le statut. comment gérer la commande pour attendre le dernier serveur à effectuer

Veuillez suggérer

exemple de code.

foreach my $Server_name(@servers) { my $command =qq(sudo /bin/su - jenkins -c "ssh scm\@$Server_name ' /bin/sh ${SCRIPT_HOME}/startService.sh'"); print "$command\n"; system($command); if ($?== 0) { do some action } } 

Le $? Dans ce cas, variable contient le statut du system , mais le système lui-même le renvoie également. Puis atsortingbuer son retour à une variable et le vérifier après la boucle

 my $exit_status; foreach my $server_name (@servers) { my $command = qq(sudo /bin/su - jenkins -c "ssh scm\@$server_name ' /bin/sh ${SCRIPT_HOME}/startService.sh'"); print "$command\n"; $exit_status = system($command); } if ($exit_status == 0) { ... } 

Je voudrais aussi commenter

  • Nous ne soaps pas ce dont vous avez besoin des erreurs mais considérez si $? est assez; si vous ne vérifiez que les erreurs, tout va bien, mais sinon tout ce que vous obtenez du system est le dernier état de l’ wait . Divers modules IPC permettent un meilleur signalement des erreurs

  • Une commande dans une chaîne pour le system peut être dangereuse car elle peut être transmise au shell pour être interprétée en premier. Si le shell n’est pas réellement nécessaire, il est préférable d’utiliser le système de type LIST, où le shell n’est pas impliqué; voir également exec pour la discussion du formulaire de liste

  • Pour préparer une chaîne pour la commande, il est préférable d’utiliser Ssortingng :: ShellQuote