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;
    }
}
Était-ce utile?

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
scroll top