Perl `ssh host命令`无法返回该命令的结果

Perl `ssh host命令`无法返回该命令的结果,perl,Perl,有几台电脑,我想用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()

有几台电脑,我想用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();
}
谢谢 ~
~

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

print `ssh $Hosts[$i] who`;
假设您使用的是ssh代理、Kerberos或其他允许您在不提供密码的情况下登录的工具,则暂停时间仅为`getc.

使用:

请不要使用$i进行迭代


更方便。

我想在这里补充一点,如果您想对来自命令的数据进行进一步处理,请记住,您需要捕获输出,如

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

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

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

您计划如何处理输出?除非您正在观看终端,否则您将希望在某个地方记录或写入结果。日志::调度非常简单,但您可以将脚本记录到文件中,旋转它们,发送电子邮件等


如果您要进行大量远程执行和监视,请务必查看Rex和。

@ErnestFriedman Hill好的,我知道了,谢谢
my @users = `ssh $Hosts[$i] who`;