私はプログラムのインストールを自動化するために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
を閉じた後、インストールスクリプトを再開するにはどうすればよいですか?