如何使expect程序脚本中的expect命令等待精确的字符串匹配

时间:2012-04-09 10:00:46

标签: shell unix scripting sh expect

我想知道如何在expect脚本中使expect命令等待完成匹配的字符串,然后再继续执行脚本中的下一行。

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,这不应按照expect的定义进行。它应该等到expect命令中的完整字符串匹配。

我想知道是否有任何更严格的命令可以使用,以便等到发生精确的字符串匹配。请帮我解决这个问题

1 个答案:

答案 0 :(得分:5)

您之前已在脚本中使用它:expect -exact。但长匹配的字符串几乎可以保证导致问题;您应该尝试将其剪切为最短的唯一匹配,如果需要将其分成多个expect命令。

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