2016-07-22 8 views
3

私はプログラムのインストールを自動化するためにExpectスクリプトを使用しています。インストールの依存関係の1つに問題があるため、db.propertiesファイルを編集するには、特定の時点でインストールプロセスを一時停止する必要があります。そのファイルが変更されると、インストールプロセスを再開できます。インストールの途中で新しいプロセスを生成することができますが、そのプロセスを終了した後に "spawn id exp5 not open"エラーが発生します。私の自動インストールスクリプトはその実行の途中で上記のスクリプトを生成します新しいプロセスを生成して、予期したスクリプトに戻る

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

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

出力ログinstall_output.logは、次のエラーが表示されます。

db_edit.shは、適切なファイルを編集します

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

データベース情報スクリプトが正しく動作していることが分かり、実際に生成されています。ただし、そのプロセスを閉じると、インストールプロセスのスポーンIDも明らかに閉じられ、spawn id exp5 not openエラーが発生します。

また興味があるのは、スポーンが起こる前に発生しているように見えることです。 "PRESS <ENTER>"への応答は、ENTERが送信されたことを示すために"\r"または^Mである必要があります。

db_edit.shを閉じた後、インストールスクリプトを再開するにはどうすればよいですか?

答えて

2

あり、そのスクリプトで任意の対話を自動化する必要がないので、spawn

exec db_edit.sh 

このように使用しないでください、あなたは現在、生成されたプロセスのspawn_idに干渉していません。