0

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

电脑只是暂停。

我尝试键入此命令 => 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();
}

谢谢~~

4

4 回答 4

3

结果不会显示,因为在执行命令时,实际上并没有显示它的输出;你需要做类似的事情

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

假设您正在使用ssh-agent、Kerberos 或其他让您无需提供密码即可登录的东西,暂停只是 `getc().

于 2013-06-03T13:31:37.220 回答
3

使用system()代替:

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

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

请不要用$i.

Run3更方便。

于 2013-06-03T13:39:06.193 回答
1

我认为这里的答案涵盖了您需要的内容,但会强调使用foreach 例如的价值:

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

你打算如何处理输出?除非您正在观看终端,否则您将想要在某处记录或写入结果。Log::Dispatch非常简单,但您可以将脚本记录到文件中、轮换它们、发送电子邮件等。

如果您要进行大量远程执行和监控,请务必查看 Rex https://metacpan.org/pod/Rex(和http://www.rexify.com)。

于 2013-06-03T14:54:22.327 回答
1

我想在这里添加一件事是,如果您想对来自命令的数据进行进一步处理,请记住您需要捕获输出,例如

my @users = `ssh $Hosts[$i] who`;
于 2013-06-03T13:40:08.180 回答