【发布时间】:2012-11-23 11:53:09
【问题描述】:
我在 perl 中使用 expect 来做 ssh,下面是我的代码片段。
my $exp = Expect->spawn("ssh renjithp\@192.168.1.12") or die "could not spawn ssh";
my $op = $exp->expect(undef,'renjithp>');
print "*$op*";
如果主机无法访问(目标 IP 已关闭),我想处理错误,我的印象是当 ip 无法访问时会发生死机,但是当我给出错误的 IP 时脚本不会终止并且它持续执行。
处理这种情况的正确方法是什么?
已编辑 我观察到当 ssh 成功时 $op 值为 1,当目标 IP 未启动时为 0。使用 $op 做出决定是否正确?
我还有一个疑问,当无法访问目标 IP 时,为什么控制超出预期,我的意思是 '$exp->expect(undef,'renjithp>');'应该只有在得到正确提示后才返回?
【问题讨论】:
-
可能不是您想要的答案,但是在我工作的一个地方,我们最终在类似的场景中放弃了 Expect 模块,而是使用带有脚本的命令行 expect 。也许从那以后它有所改善。
-
我想我明白了期望回报的原因。 **当 IP 无法访问时,ssh 的衍生进程将终止,这将导致预期关闭。为了验证这一点,我采用了一个成功的案例,我将语句 $exp->expect 用于不期望的东西,现在控制在这一点上被阻止。当我从不同的终端杀死 SSH 进程时,阻塞期望的控制就出来了。所以我觉得我可以使用 $op 来验证 ssh 是否成功。
标签: perl networking ssh expect