我正在尝试在读取文件后运行命令。
当我在看到的命令中使用$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`
我应该如何检查这一行?为什么出现多余的符号?
答案 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
,后跟换行符,这会将文件中的下一个条目移到下一行