【问题标题】:Is there an equivalent in Net::SSH::Expect 1.09 for "collect_exit_code"Net::SSH::Expect 1.09 中是否有“collect_exit_code”的等价物
【发布时间】:2012-09-04 20:49:37
【问题描述】:

我遇到了这个链接:Exit status code for Expect script called from Bash,但它对我没有帮助。当我希望从远程运行的命令中获取退出状态代码时,我遇到了 Net::SSH::Expect 0.08 的 cpan 文档,其中包含“collect_exit_code”和“last_exit_code”方法,这正是我想要的今天使用,但是在运行 1.09 时我找不到合适的替代品。

我想保持简单,例如:

$ssh_devel_exp->collect_exit_code(1);
$ssh_devel_exp->send("sudo make");
if ($ssh_devel_exp->last_exit_code()) { etc. and so forth... };

但是,如果没有类似的方法,我想不出一种简单的方法来通过 Net Expect 运行命令时获取退出状态。

我不认为切换到 Fabric 是解决此问题的方法;这是一个 perl 应用程序,我需要坚持使用 Perl。

提前致谢。

【问题讨论】:

  • 使用Net::OpenSSH!
  • 嗯,这看起来很有希望。我得试一试。谢谢!

标签: perl perl-module cgi-bin perlnetssh


【解决方案1】:

您是否尝试调用底层的期望对象?

$ssh_devel_exp->{expect}->collect_exit_code(1);
$ssh_devel_exp->send("sudo make");
if ($ssh_devel_exp->{expect}->last_exit_code()) { etc. and so forth... };

如果没有其他帮助,您可以创建一个小的 shell 脚本来执行您的命令并在 stderr 上报告退出状态。

【讨论】:

  • 嗯,也许我应该包括对象的创建...我像这样创建对象:my $ssh_devel_exp=Net::SSH::Expect->new(host=>$devel_server,user=>$USER,password=>$PASS_M,raw_pty=>1); 这使得“调用”(“->{expect}”)是多余的,正确的?当我尝试添加时,我得到:错误:在 /usr/lib/cgi-bin/menu.pl 第 217 行的 Expect 类中找不到方法 `collect_exit_code'。
猜你喜欢
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 2013-06-21
  • 2014-01-09
  • 2012-02-18
相关资源
最近更新 更多