Frage

Ich habe eine Liste von Argumenten in ein Perl-Skript übergeben, ARGV verwenden. Das vierte Argument ist der Name des Servers, aber ich will es eine Textdatei namens mit einer Liste von Servern servers.txt passieren. Wie gehe ich, dass in und es als Argument für ARGV verwenden?

Beispieldatei servers.txt:

server1
server2
server3

Arbeits Code:

# 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;
    }
}
War es hilfreich?

Lösung

Das sieht wie ein Job für xargs.

Mit diesem Stand-in für Ihren test.pl das zeigt der Befehl ausgeführt

#! /usr/bin/perl

use warnings;
use strict;

$" = "][";
print "[@ARGV]\n";

läuft

$ xargs -I{} ./test.pl Jul 05 2010 {} logfile <servers.txt

erzeugt

[Jul][05][2010][server1][logfile]
[Jul][05][2010][server2][logfile]
[Jul][05][2010][server3][logfile]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top