2012-02-28 33 views
0

我試圖使用expect來自動接受在--more--中提示的EULA。期望和 - 更多 -

#!/usr/bin/expect 
spawn "./greenplum-perfmon-web-4.1.2.0-build-2-RHEL5-x86_64.bin" 
expect "--More--" 
send "q" 
expect "*****" 
send "yes" 
expect "*****" 
send "" 
expect "*****" 
send "yes" 

這是行不通的,我不知道爲什麼。該腳本始終在 - 更多 - 提示處停止,第二個腳本立即處理腳本的其餘部分。

我與

expect -exact "--More--" 

expect "the Customer" 
(what is written above the --More--) 
+1

設置'exp_internal 1'以獲得更好的調試輸出 – resmon6 2012-02-28 15:10:25

+0

如果程序希望用戶點擊輸入,則將'send'改爲''發送到'發送'是\ r「'。 'expect「****」'可能會匹配任何內容,因爲默認匹配模式是'-glob','*'是glob特殊字符:使用'expect -exact ****' – 2012-02-28 20:06:33

回答

2

試圖嘗試設置$MORE喜歡的東西-99999999使得more提示一直沒有出現。

+0

環境變量。你知道,「更多」讀取它的選項?你知道這是因爲你閱讀手冊頁,對吧? – 2012-02-28 15:11:57

0

一個解決方案,避免期望乾脆:

你可以通過設置PAGER環境變量設置爲不同的程序,並使用yes程序完全避免問題。以下是關閉,許多yes\n字符串發送到安裝程序,因爲它會採取:

PAGER=cat yes yes | ./greenplum-perfmon-web-4.1.2.0-build-2-RHEL5-x86_64.bin 

如果看起來怪異的你,這幾乎等同於以下內容:

export PAGER=cat 
yes yes | ./greenplum-perfmon-web-4.1.2.0-build-2-RHEL5-x86_64.bin 

的區別是與單線,PAGER只爲那一個命令設置,而不是後來發生的任何事情。