2017-04-12 9 views
0

私たちの製品をインストールするプロセスを自動化するためにExpectパッケージを使用して自動shスクリプトを作成しようとしています。インストールのプロセスが進行している間、私は計画しているように質問をします。しかし、スクリプトが質問を得るとき:Enter PushVOD database name (leave blank for default 'pushvod'): それはインストールを閉じるたびにです。 私は引用符で問題と思う - '質問:for default 'pushvod'Bash and 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. ファイルの埋め込みにシェル機能「Here Documents」を使用し、実行予定スクリプト を使用できます。
  4. このコマンドでは、tar xvfz XXXXXXXXXXX.tar.gz最後のオプションはfである必要があります。このオプションの後に はアーカイブ名に従わなければなりません。
  5. このコマンドでは、 はこの文字列のみで/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

関連する問題