以下循环不产生输出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);
}
答案 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);
}
我认为应该有效,不是吗?
(我刚用一个简单的脚本来测试它,它对我来说很好。)