读取文件后多余的符号

时间:2018-08-22 10:45:49

标签: perl

我正在尝试在读取文件后运行命令。

当我在看到的命令中使用$hostname

ssh machine? ps auxw -U myname 2>&1

所以我那里有多余的?

我的主机文件包含:

machine01
machine02

它没有多余的空格,我只按了Enter

请检查我的示例:

sub CheckHosts {

    my $programname   = $_[0];
    my $HostsFileName = $ENV{'HOST_FILE'};

    open my $CFILE_HANDLE, "< $HostsFileName" or die "Error: open file $HostsFileName--$!\n";

    while ( $hostname = <$CFILE_HANDLE> ) {

        print $hostname;    # Clear output without ?

        &FindRunning( $programname, $hostname );    #Give my args in func
    }
}

下一步:

sub FindRunning {

    my $programname = $_[0];
    my $hostname    = $_[1];

    print $hostname;    # Debug and get clear output without ?

    my $logname = $ENV{'USER'};
    my $rc = open PSFD, "ssh $hostname ps auxw -U $logname 2>&1 |";
}

我怎么知道?的来源?

该进程挂在我开始运行脚本的计算机上。然后我用:

$ps ax

然后查看包含的行

sh -c ssh machine01? ps auxw -U user 2>&1`

我应该如何检查这一行?为什么出现多余的符号?

1 个答案:

答案 0 :(得分:3)

使用<>从文件句柄读取数据时,Perl将文件分成几行。 Perl认为行结束符是$/特殊变量的内容。从行末删除此值。

您可以使用chomp()函数从行尾删除行尾标记(如果存在)。因此,更改

while ($hostname = <$CFILE_HANDLE>) {
    print $hostname;          #Here I debug and get clear output without ?
    &FindRunning($programname, $hostname); #Give my args in func
}

对此

while ($hostname = <$CFILE_HANDLE>) {
    print $hostname;          #Here I debug and get clear output without ?
    chomp $hostname;
    &FindRunning($programname, $hostname); #Give my args in func
}

print之所以起作用,是因为它正在打印machine01,后跟换行符,这会将文件中的下一个条目移到下一行