2016-04-20 5 views
0

Dies ist das Endziel: Führen Sie einen mysql-Befehl mit dem expect-Skript aus, um das Kennwort zu senden, wenn Sie dazu aufgefordert werden. Es gibt 3 Dateien insgesamtSkript erwarten, dass das Passwort nicht korrekt gesendet wird

  1. test.sh
  2. test1.sh
  3. test.exp

Hier sind die Codes:

test.sh (kehrt die Passwort, das benötigt wird, um eine Verbindung zur MySQL-Datenbank herzustellen)

grep hibernate.connection.password /opt/cisco/cpam/properties/vx.hibernate.properties | sed 's/hibernate.connection.password=//g' 

test1.sh (der mysql-Befehl, werden excecuted muss)

mysql -u cpam -p --protocol=tcp vxdb < /opt/cisco/cpam/import/MySQL_Views.sql 

test.exp (das Skript erwarten, das Passwort sendet, während mysql-Befehl ausgeführt wird)

set password [exec ./test.sh] 
exec ./test1.sh 
expect "Enter password: " 
send "$password\r" 
expect eof 

Das Ergebnis von mir läuft erwarten test.exp ist, dass ich nur die Eingabeaufforderung sehe:

Enter password: 

kann Jeder Experte mir eine Hand geben, um zu sehen, was falsch läuft? Es bedeutet sicher, dass test1.sh erfolgreich ausgeführt wurde, und ich habe auch viele Male versucht, einschließlich der Verwendung von nur statischen Passwort. Immer noch nur die Eingabeaufforderung.

Vielen Dank!

Antwort

1

Damit ein Programm interagierbare-mit über expect und send sein, müssen Sie es mit spawn starten und nicht exec. Versuchen Sie dies:

set password [exec ./test.sh] 
spawn ./test1.sh 
expect "Enter password: " 
send "$password\r" 
expect eof 
+0

Ich fühle mich außergewöhnlich dumm .. Danke – Tony