Comment passer argument ARGV à partir d'un fichier texte en Perl
Question
J'ai une liste d'arguments pour passer dans un script Perl, en utilisant ARGV
. Le 4ème argument est le nom d'un serveur, mais je veux transmettre un fichier texte avec une liste de serveurs appelés servers.txt
. Comment puis-je passer que et l'utiliser comme argument pour ARGV
?
Exemple de fichier servers.txt
:
server1
server2
server3
Code de travail:
# usage example: ./test.pl Jul 05 2010 <server> <logfile>
# $ARGV[0]=Jul
# $ARGV[1]=05
# $ARGV[2]=2010
# $ARGV[3]=server
# $ARGV[4]=/pathoffile
use strict;
use warnings;
my($mon,$day,$year,$server,$file) = @ARGV;
open(my $fh,"ssh $server cat $file |") or die "can't open log $server:$file: $!\n";
while (my $line = <$fh>) {
if ($line =~ /.* $mon $day \d{2}:\d{2}:\d{2} $year:.*(ERROR:|backup-date=|backup-size=|backup-time=|backup-status)/) {
print $line;
}
}
La solution
Cela ressemble à un emploi pour xargs
.
L'utilisation de ce stand-in pour votre test.pl
qui montre la commande exécutée
#! /usr/bin/perl
use warnings;
use strict;
$" = "][";
print "[@ARGV]\n";
en cours d'exécution
$ xargs -I{} ./test.pl Jul 05 2010 {} logfile <servers.txt
produit
[Jul][05][2010][server1][logfile] [Jul][05][2010][server2][logfile] [Jul][05][2010][server3][logfile]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow