gpt4 book ai didi

linux - 在使用 perl 的 expect 发送命令之前,如何正确地等待终端中的提示?

转载 作者:行者123 更新时间:2023-12-03 09:51:06 24 4
gpt4 key购买 nike

我对 Perl 和 expect 都很陌生,一直在尝试弄清楚如何在仅出现提示时发送命令。我知道在终端显示某个输出后如何发送命令,但是当前一个命令没有特定的成功消息时找不到正确的命令发送方式,所以只有在行之后命令是提示符。我尝试使用的代码是:

$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);

但这只是在看似随机的时间发送命令,并不等待上一个命令完成。这种方法是唯一可行的方法,还是有等待提示出现但只发送一次命令的方法?

最佳答案

如果您只想在找到匹配项并执行 send() 后返回 expect() 调用,只需返回 undef而不是 exp_continue

通常,当您有很多不同的提示要使用react时,您会以自己的方式使用 expect()。如果您只是要逐行发送命令并且在每行之间有相同的提示,您可以交替使用它们:

my $prompt = $user."@".$host;
$rc = $exp->expect($timeout, $prompt);
$exp->send("date\n");
$rc = $exp->expect($timeout, $prompt);
$exp->send("ls\n");

或者另请参阅 Expect::Simple 模块,它每次都会为您处理寻找提示。

关于linux - 在使用 perl 的 expect 发送命令之前,如何正确地等待终端中的提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61210472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com