2013-06-03 20 views
0

有几台电脑,我想用who命令查看谁在线。我写了一个脚本可以让我检查所有的电脑,但似乎没有返回谁在线的信息....`ssh host command`无法返回命令的结果

电脑只是暂停。

我尝试键入这个命令=>ssh f-001 who,它的工作原理。但是,当我将它写入脚本时,它会失败。

这里是我的代码

@Hosts = ("f-001","f-002","f-003","f-004","f-005"); 

for($i=0;$i<=$#Hosts;$i++) 
{ 
     `ssh $Hosts[$i] who`; 
     getc(); 
} 

感谢 〜 〜

+0

@ ErnestFriedman-Hill OK我明白了,谢谢 – user2131116

回答

3

,因为当你执行命令,你实际上并没有显示它的输出结果不显示;你需要做的是这样

print `ssh $Hosts[$i] who`; 

假设你正在使用ssh-agent,Kerberos或别的东西,可以让你登录不给密码,暂停只是`GETC()。

3

使用system()代替:

@Hosts = ("f-001","f-002","f-003","f-004","f-005"); 

foreach $host (@Hosts) 
{ 
    system ("ssh $host who"); 
} 

请不要用$i迭代。

Run3更方便。

1

我想补充一点在这里要说的是,如果你想要做的数据从命令这才想起出山进一步processiong需要捕获输出像

my @users = `ssh $Hosts[$i] who`; 
1

我认为答案这里涵盖你需要的东西,但会强调使用的价值,例如使用foreach

foreach my $host ("mail1", "san", "ws100.internal"){ say qx/ping -c1 $host/}

你打算如何处理与输出?除非您正在观看终端,否则您将要在某处记录或写入结果。 Log::Dispatch是非常简单的,但你可以使你的脚本日志文件,旋转它们,发送电子邮件等

如果你打算做大量的远程执行和监控,一定要看一看雷克斯https://metacpan.org/pod/Rex(和http://www.rexify.com )。