1

我有一个要传递给 Perl 脚本的参数列表,使用ARGV. 第 4 个参数是服务器的名称,但我想向它传递一个文本文件,其中包含名为servers.txt. 我如何传递它并将其用作参数ARGV

示例文件servers.txt

server1
server2
server3

工作代码:

# 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;
    }
}
4

1 回答 1

3

这看起来像是一份工作xargs

使用这个替代你的test.pl,显示执行的命令

#! /usr/bin/perl

use warnings;
use strict;

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

跑步

$ xargs -I{} ./test.pl 2010 年 7 月 5 日 {} 日志文件 <servers.txt

生产

[7月][05][2010][server1][日志文件]
[7月][05][2010][server2][日志文件]
[7月][05][2010][server3][日志文件]
于 2010-07-07T23:14:33.803 回答