2012-10-12 32 views
0

我正在研究一個小腳本來嘗試自動安裝梨系統,如果它丟失 - 基本上,採取交互部分的安裝過程,使他們非互動,所以所有我需要做的是執行腳本,它爲我自己做。這是我第一次嘗試使用期望值,這不是我所期望的。自動化梨安裝與期望

示例代碼如下:

/usr/bin/expect <<EOD 
      set timeout 20 
      set number [lindex $argv 0] 
      set path [lindex $argv 1] 

spawn php -q go-pear.phar 
expect "1-11, 'all' or Enter to continue:" 
send "$number\r" 
interact 
expect "Installation base ($prefix) [/usr/local] :" 
send "$path\r" 
interact 
EOD 

這不太做什麼工作的,因爲它正試圖填補在/ usr /本地部分的第一個菜單如下:

1-11, 'all' or Enter to continue: invalid command name "/usr/local" 
    while executing 
"/usr/local" 
    invoked from within 
"expect "Installation base() [/usr/local] :"" 

燦有人向我展示我在這裏失蹤的事物?另外,我希望得到這個,所以我不必將其作爲./script $ var0 $ var1運行,而是將它作爲./script運行,並且所有內容都包含在內並填充,但不知道如何執行那。

在此先感謝您提供的任何幫助。

+0

我得到了同樣的錯誤。但是當腳本在文件中時,運行'sh install.sh'會出現其他錯誤。 –

回答

1

我最終弄清楚了這一點。如果任何人想要做同樣的事情,在這裏是爲我工作:

/usr/bin/expect <<EOF 
set send_slow {1 .1} 
set timeout -1 
spawn php -q go-pear.phar 
expect "1-11, 'all' or Enter to continue:" 
    sleep .1 
send -s -- "1\r" 
expect -exact "1\r" 
    sleep .1 
send -s -- "/usr/local\r" 
expect -exact "/usr/local\r" 
expect "1-11, 'all' or Enter to continue:" 
    sleep .1 
send -s -- "\r" 
expect -exact "\r" 
expect EOF 
3

一個問題是,這樣的字符串內的[...]告訴預計執行命令。我想你需要用\[...\]來逃避它們。

希望這會有所幫助=)