2012-04-09 53 views
4

我想知道如何使指望命令expect腳本等待確切字符串繼續到下一行的腳本之前進行匹配精確的字符串。如何使指望命令期望程序腳本以等待匹配

Bourne外殼程序(SH)的腳本:

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

spawn ssh -Y [email protected] 
expect -exact "[email protected]'s password: " 

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

# replace the prompt with ur own prompt 
expect "[email protected]:~$ " 

# 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後的代碼應該等待 「再見世界\ r ......」 在屏幕上會出現串。但即使屏幕完全提示不同的字符串,代碼正在執行下一行並輸入選項2,根據期望的定義,該選項不應該出現。它應該等到expect命令中的完整字符串匹配。

我想知道是否有更嚴格的命令可以使用,以便期望等到發生完全字符串匹配時。請幫助我解決這個問題

+1

加上'exp_internal 1'到腳本 - 將冗長告訴你現在想到的是試圖匹配,你就可以明白爲什麼匹配成功。 – 2012-04-09 11:34:36

回答

3

您已經在腳本的早期使用它:expect -exact。但長期匹配的字符串幾乎保證會導致問題;您應該嘗試將其縮減爲最短的唯一匹配,必要時將其分解爲多個expect命令。

在這種情況下,根據您的顯示,正確的命令可能是expect -exact "choice:"。但從本質上講,如果沒有可能的計劃產出的全部細節,就不可能確定這一點。

+0

我已經嘗試過使用expect - 確切的「」命令,但仍期望允許執行下一個命令,而不是在步驟之前發生精確的字符串匹配。 – chaitu 2012-04-09 10:35:46

+0

你還在試圖匹配整個多行字符串嗎?正如我所說的,這是行不通的(見'match_max'和關於「系統消化不良」的討論)在'expect'手冊頁)。你應該也可以檢查超時。 – geekosaur 2012-04-09 10:45:03