2017-04-12 4 views
0

Ich versuche, automatische Sh-Skript über Expect-Paket für den automatisierten Prozess der Installation unseres Produkts zu erstellen. Wie ich plane, werde ich Fragen bekommen, während die Installation läuft. Aber wenn das Skript eine Frage stellt: Enter PushVOD database name (leave blank for default 'pushvod'): ist es jedes Mal die Installation zu schließen. Wie ich denke, Problem in Anführungszeichen - ' in Frage: for default 'pushvod'Bash und Expect - 'unterbricht .sh Skript

Aber ich habe keine Ideen, wie man es löst. Ich habe versucht, \' in Erwartungen zu schreiben, auch versucht, ti schreiben Erwartungen mit *, aber es hat nicht geholfen. Script, was auch immer bei dieser Frage schließt.

#!/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;' 

Antwort

0
  1. Sie brauchen nicht ganze Reihe setzen in erwarten. Standardmäßig verwenden Sie expect Befehl verwenden Glob-Muster. Also Enter PushVOD database name*: ist in Ordnung. * bedeutet "ein bisschen Text hier".
  2. Für Zitate innerhalb expect besser zu verwenden {}. Es ist ein Analogon der Schalen ''.
  3. Sie können die Shell-Funktion "Here Documents" zum Auffüllen von Dateien und zum Ausführen von expect-Skripten verwenden.
  4. In diesem Befehl tar xvfz XXXXXXXXXXX.tar.gz letzte Option muss f sein. Nach dieser Option muss dem Archivnamen folgen.
  5. In diesem Befehl echo "deb XXXXXXXXXX amd64/" > /etc/apt/sources.list sind Sie sicher, dass Sie wollen /etc/apt/sources.list mit nur dieser Zeichenfolge umschreiben? Wenn nicht, sollten Sie >> verwenden.

Es gibt Code:

#!/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

Hallo! Ich habe es versucht. Aber es hat nicht für mich funktioniert. Installation alle Zeit unterbricht bei Fragen mit Anführungszeichen. – Adept

+0

vielleicht gibt es Farben oder Zitate Char nicht üblich '' 'aber einige utf Symbole? Sie können' expect-d << END' ausführen, um herauszufinden, welche Eingabe Sie haben – komar