perl期望远程运行30个命令

时间:2012-09-04 22:26:47

标签: perl expect

以下循环不产生输出IF我没有最后的exp-> expect(5)行(睡眠类型)。我想这是因为循环运行“太快”,'sent'命令才能完成。如何才能确保下一个命令仅在前一个命令完成时运行?我正在日志文件中收集输出。

任何建议,pl。

TY。

use Expect;
...
...
foreach my $cmd (@cmd_array){
$exp->expect(3,
    [ qr/($|#)/ => sub { shift->send("$cmd");}]
       );
exp->expect(5);
}

2 个答案:

答案 0 :(得分:0)

也许你需要使用exp_continue喜欢 -

use Expect;
...
...
foreach my $cmd (@cmd_array){
$exp->expect(3,
    [ qr/($|#)/ => sub { shift->send("$cmd\n");
                         exp_continue;}]
       );
}

此外,我认为sub{...}内的语句仅在模式匹配qr/($|#)/时才会运行。此外,我认为在输入输入或命令后,您通常会按返回键执行命令,因此$cmd\n

答案 1 :(得分:0)

有没有理由让你不能让Net :: OpenSSH为你做这个?

从其文档中,您可以使用capture()/ capture2()方法 (取决于你是否需要捕获STDOUT或STDOUT和 STDERR来自流程)。

例如:

for my $command (@commands) {
    my $result = $ssh->capture($command);
}

我认为应该有效,不是吗?

(我刚用一个简单的脚本来测试它,它对我来说很好。)