Java新手问题,
我正在尝试将我的一些脚本从基于 Perl 的脚本转移到 Java 中,我很幸运可以在这里的示例中找到答案,但是这个让我很难过。我尝试使用 expect 模块将类似的行为复制到 Perl 脚本,但没有成功。
$exp->spawn("ssh -l $username $dev_ip\n");
$exp->expect(15,
[ qr/ssh -l $username $dev_ip\r/ => sub { exp_continue; } ],
[ qr/\(yes\/no\)\?\s*$/ => sub { $exp->send("yes\n"); exp_continue; } ],
[ qr/[Pp]assword:\s*$/ => sub {$exp->send("$password\n");exp_continue;}],
[ qr/User/ => sub { $exp->send("$username\n"); exp_continue;} ],
[ qr/Press any key to continue/ => sub {$exp->send("\n");exp_continue;}],
[ qr/$prompt/i => sub { $exp->send("\n");],);
如果从未到达提示行,则上述超时 15 秒后。在尝试通过调用子例程登录时,它还可以看到和响应多个条件。
我认为根据我读到的内容,我需要使用类似于以下示例的交互,但我不完全确定 lambda 在这里做了什么。有人可以提供更详细的细节吗?
expect.interact()
.when(contains("abc")).then(r -> System.out.println("A"))
.when(contains("xyz")).then(r -> System.err.println("B"))
.until(contains("exit"));
System.out.println("DONE!");
我怀疑我需要一个在交互循环中响应提示的示例,并且可能将整个交互包装在某种类型的计时器中以提供默认操作,如果没有任何结果导致登录提示。
我看过
expect.expect(anyOf(contains("string"), regexp("abc.*def")));
但不认为它会满足我的需求,因为我看不到在继续寻找其他人的同时回应比赛的方法。