我对 Perl 和期望都很陌生,并且一直试图弄清楚如何在仅出现提示时发送命令。我知道在终端中显示某个输出后如何发送命令,但是当上一个命令没有特定的成功消息时找不到发送命令的正确方法,所以后面的唯一内容命令是提示符。我尝试使用的代码是:
$exp->expect($timeout,
[$user."@".$host, sub{my $self = shift;
$self -> send(the command I want to send);
exp_continue;}],
$GW);
$user. " @",$host代表终端中的提示符,但正如您可能猜到的那样,命令会不断发送,因为一旦发送命令,提示符就会再次出现,因此再次发送命令,所以程序陷入无限循环。我尝试将exp_continue更改为exit,但这意味着整个子程序由于某种原因停止工作。我还尝试将exp_continue更改为exp_continue_timeout并在子例程中添加 sleep 语句,但它并没有停止无限循环。
我也尝试过使用
sleep(5);
$exp->send(command);
但这只是在看似随机的时间发送命令,而不是等待前一个命令完成。这种方法是唯一可能的方法,还是有一种方法可以等待提示出现但只发送一次命令?