有几台电脑,我想使用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();
}
感谢 〜 〜
答案 0 :(得分:3)
结果不会显示,因为在执行命令时,实际上并没有显示其输出;你需要做一些像
这样的事情print `ssh $Hosts[$i] who`;
假设您正在使用ssh-agent
,Kerberos或其他允许您在不提供密码的情况下登录的内容,则暂停只是`getc()。
答案 1 :(得分:3)
改为使用system():
@Hosts = ("f-001","f-002","f-003","f-004","f-005");
foreach $host (@Hosts)
{
system ("ssh $host who");
}
请不要使用$i
进行迭代。
Run3更方便。
答案 2 :(得分:1)
我想在这里添加一件事是,如果你想进一步使用命令输出的数据,那么记住你需要捕获输出,如
my @users = `ssh $Hosts[$i] who`;
答案 3 :(得分: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)。