6

我想知道如何使期望脚本中的期望命令等待确切的字符串匹配,然后再继续脚本中的下一行。

Bourne shell (sh) 脚本:

#!/bin/sh
#!/usr/bin/expect

spawn ssh -Y localuser@lbblr-tirumala
expect -exact "localuser@lbblr-tirumala's password: "

# replace password with ur own passwd
send "geomax45\r"

# replace the prompt with ur own prompt
expect "localuser@lbblr-tirumala:~$ "

# run application
send "./sample\r"

expect "*Menu*\r
1. print hello world\r
2. print Bye world\r
3. quit\r
enter choice: "
# enter choice 1
send "1\r"
expect "Bye world\r
*Menu*\r
1. print hello world\r
2. print Bye world\r
3. quit\r
enter choice: $"
# enter choice 2
send "2\r"

在上面的代码中输入 1 后,代码应该等待“Bye world\r......”字符串出现在屏幕上。但即使屏幕提示完全不同的字符串,代码正在执行下一行并输入选项 2,根据期望的定义,这不应该发生。它应该等到期望命令中的完整字符串匹配。

我想知道是否可以使用任何更严格的命令,以便期望等待直到发生精确的字符串匹配。请在这个问题上帮助我

4

1 回答 1

8

您已经在脚本的前面使用了它: expect -exact. 但是长匹配字符串几乎肯定会导致问题。您应该尝试将其缩减为最短的唯一匹配项,如有必要将其分解为多个expect命令。

在这种情况下,仅根据您显示的内容,正确的命令可能是expect -exact "choice:". 但本质上,如果没有可能的程序输出的完整细节,就不可能确定这一点。

于 2012-04-09T10:07:31.183 回答