2017-04-12 63 views
0

我試圖通過使用Expect包創建自動sh腳本,以便自動安裝我們的產品。正如我計劃的那樣,當安裝過程正在進行時,會發現問題。但是當腳本得到問題時:Enter PushVOD database name (leave blank for default 'pushvod'): 它每次都關閉安裝。 因爲我認爲問題引用 - '有問題:for default 'pushvod'Bash和Expect - '正在中斷.sh腳本

但我沒有想法如何解決它。我試着在預期的期望中寫入\',也嘗試過用*寫下期望值,但沒有幫助。腳本無論在這個問題關閉。

#!/bin/bash 
#!/bin/expect 
# 
apt-get --purge remove python-pip 
apt-get --purge remove python-setuptools 
echo " " > /etc/apt/sources.list 
echo "deb http://httpredir.debian.org/debian jessie main" >> /etc/apt/sources.list | echo "deb-src http://httpredir.debian.org/debian jessie main" >> /etc/apt/sources.list | echo "deb http://httpredir.debian.org/debian jessie-updates main" >> /etc/apt/sources.list | echo "deb-src http://httpredir.debian.org/debian jessie-updates main" >> /etc/apt/sources.list | echo "deb http://security.debian.org/ jessie/updates main" >> /etc/apt/sources.list | echo "deb-src http://security.debian.org/ jessie/updates main" >> /etc/apt/sources.list 
cd /var/tmp 
/usr/bin/apt-get update 
apt-get --assume-yes install expect 
tar xvfz XXXXXXXXXXX.tar.gz 
mv /var/tmp/XXXXXXXX.deb /var/tmp/pushvod-dependencies 
echo "deb XXXXXXXXXX amd64/" > /etc/apt/sources.list 
aptitude update 
expect -c 'spawn aptitude install dpkg-dev; 
expect "Accept this solution?" {send "n\r"}; 
expect "Accept this solution?" {send "Y\r"}; 
expect "Do you want to continue?" {send "Y\r"}; 
expect "To continue, enter \"Yes\"\; to abort, enter \"No\":" {send "Yes\r"}; 
expect "To continue, enter \"Yes\"\; to abort, enter \"No\":" {send "Yes\r"}; 
interact;' 
cd pushvod-dependencies 
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz 
echo "deb file:/var/tmp/pushvod-dependencies ./" >> /etc/apt/sources.list 
aptitude update 
expect -c 'spawn aptitude install pushvod; 
expect "Accept this solution?" {send "n\r"}; 
expect "Accept this solution?" {send "Y\r"}; 
expect "Do you want to continue?" {send "Y\r"}; 
expect "To continue, enter \"Yes\"\; to abort, enter \"No\":" {send "Yes\r"}; 
expect "To continue, enter \"Yes\"\; to abort, enter \"No\":" {send "Yes\r"}; 
expect "Enter PushVOD database name*:" {send "pushvod\r"}; 
interact;' 

回答

0
  1. 你不需要把整串的期望。默認情況下,期望的expect命令 使用glob模式。所以Enter PushVOD database name*:是好的。 *將意味着「一些文字在這裏」。
  2. 用於引用expect以內的字符串更好使用{}。它的外殼是類似的''
  3. 您可以使用shell功能「Here Documents」填充文件,並使用 運行預期腳本。
  4. 在此命令中tar xvfz XXXXXXXXXXX.tar.gz最後一個選項必須是f。在此選項 必須按照存檔名稱。
  5. 在這個命令echo "deb XXXXXXXXXX amd64/" > /etc/apt/sources.list你確定你想 重寫/etc/apt/sources.list只有這個字符串?如果沒有,你應該使用>>

有代碼:

#!/bin/bash 

apt-get --purge remove python-pip 
apt-get --purge remove python-setuptools 
cat <<END> /etc/apt/sources.list 
deb  http://httpredir.debian.org/debian jessie main 
deb-src http://httpredir.debian.org/debian jessie main 
deb  http://httpredir.debian.org/debian jessie-updates main 
deb-src http://httpredir.debian.org/debian jessie-updates main 
deb h ttp://security.debian.org/ jessie/updates main 
deb-src http://security.debian.org/ jessie/updates main 
END 
cd /var/tmp 
/usr/bin/apt-get update 
apt-get --assume-yes install expect 
tar xvzf XXXXXXXXXXX.tar.gz 
mv /var/tmp/XXXXXXXX.deb /var/tmp/pushvod-dependencies 
echo "deb XXXXXXXXXX amd64/" > /etc/apt/sources.list 
aptitude update 
expect << END 
    spawn aptitude install dpkg-dev 
    expect {Accept this solution?} {send "n\r"} 
    expect {Accept this solution?} {send "Y\r"} 
    expect {Do you want to continue?} {send "Y\r"} 
    expect {To continue, enter "Yes"; to abort, enter "No":} {send "Yes\r"} 
    expect {To continue, enter "Yes"; to abort, enter "No":} {send "Yes\r"} 
    interact 
END 
cd pushvod-dependencies 
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz 
echo "deb file:/var/tmp/pushvod-dependencies ./" >> /etc/apt/sources.list 
aptitude update 
expect << END 
    spawn aptitude install pushvod 
    expect {Accept this solution?} {send "n\r"} 
    expect {Accept this solution?} {send "Y\r"} 
    expect {Do you want to continue?} {send "Y\r"} 
    expect {To continue, enter "Yes"; to abort, enter "No":} {send "Yes\r"} 
    expect {To continue, enter "Yes"; to abort, enter "No":} {send "Yes\r"} 
    expect {Enter PushVOD database name*:} {send "pushvod\r"} 
    interact; 
END 
+0

嗨!我試過了。但這對我沒有用。安裝所有時間中斷問題與引號。 – Adept

+0

可能有顏色或引號字符不正常'「'但是一些utf符號?你可以運行'expect -d << END'來檢查你有什麼輸入 – komar