2016-07-22 6 views
3

Ich verwende ein Expect-Skript, um die Installation eines Programms zu automatisieren. Aufgrund eines Problems mit einem der Installationsabhängigkeiten muss ich den Installationsprozess an einem bestimmten Punkt anhalten, um die Datei db.properties zu bearbeiten. Sobald diese Datei geändert wurde, kann ich den Installationsvorgang fortsetzen. Ich kann einen neuen Prozess in der Mitte der Installation erzeugen, um dies zu tun, aber ich bekomme den Fehler "Spawn-ID exp5 nicht offen" nach dem Schließen dieses Prozesses.Neuen Prozess spawnen und zurückkehren, um Skript zu erwarten

db_edit.sh bearbeitet die entsprechende Datei:

#!/usr/bin/sh 
filename=db.properties 
sed -i "s/<some_regex>/<new_db_info>/g" $filename 

Meine automatisierte Installationsskript das Skript in der Mitte seiner Ausführung laicht:

#!/usr/bin/expect 

# Run the installer and log the output 
spawn ./install.bin 
log_file install_output.log 

# Answer installer questions 
# for simplicity, let's pretend there is only one 
expect "PRESS <ENTER> TO CONTINUE:" 
send "\r" 

# Now I need to pause the installation and edit that file 
spawn ./db_edit.sh 
set db_edit_ID $spawn_id 
close -i $db_edit_ID 
send_log "DONE" 

# Database Connection - the following must happen AFTER the db_edit script runs 
expect "Hostname (Default:):" 
send "my_host.com\r" 
# more connection info ... 

expect eof 

Das Ausgabeprotokoll install_output.log den folgenden Fehler zeigt:

PRESS <ENTER> TO CONTINUE: spawn ./db_edit.sh^M 
DONEexpect: spawn id exp5 not open 
    while executing 
"expect "Hostname (Default:):""^M 

Die Datenbankinfo wurde korrekt geändert, also weiß ich, dass das Skript funktioniert und es tatsächlich erzeugt wird. Wenn ich diesen Prozess jedoch schließe, wird die Spawn-ID des Installationsprozesses anscheinend ebenfalls geschlossen, was den Fehler spawn id exp5 not open verursacht.

Neugierig ist auch, dass der Spawn scheint passieren, bevor es sollte. Die Antwort auf "PRESS <ENTER>" sollte "\r" oder ^M sein, um anzuzeigen, dass ENTER gesendet wurde.

Wie kann ich das beheben, um das Installationsskript nach dem Schließen db_edit.sh fortzusetzen?

Antwort

2

Es gibt keine Notwendigkeit, jede Interaktivität mit diesem Skript zu automatisieren, so verwenden Sie nicht spawn

exec db_edit.sh 

Auf diese Weise sind Sie nicht mit dem spawn_id des aktuell erzeugten Prozess zu stören.

Verwandte Themen