生成新进程并 Return 期待脚本
Spawn New Process and Return to Expect Script
我正在使用 Expect 脚本自动安装程序。由于其中一个安装依赖项存在问题,我需要在特定点暂停安装过程以编辑 db.properties
文件。更改该文件后,我可以恢复安装过程。我可以在安装过程中生成一个新进程来执行此操作,但在关闭该进程后出现 "spawn id exp5 not open" 错误。
db_edit.sh
编辑相应的文件:
#!/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
显示如下错误:
PRESS <ENTER> TO CONTINUE: spawn ./db_edit.sh^M
DONEexpect: spawn id exp5 not open
while executing
"expect "Hostname (Default: ):""^M
数据库信息已正确修改,所以我知道脚本有效并且确实生成了。但是,当我关闭该进程时,安装进程的 spawn id 显然也已关闭,这会导致 spawn id exp5 not open
错误。
同样奇怪的是,重生似乎发生在它应该发生的时间之前。对 "PRESS <ENTER>"
的响应应为 "\r"
或 ^M
以指示已发送 ENTER
。
如何解决此问题以在关闭后恢复安装脚本 db_edit.sh
?
不需要自动与该脚本进行任何交互,所以不要使用 spawn
exec db_edit.sh
这样,您就不会干扰当前生成的进程的 spawn_id。
我正在使用 Expect 脚本自动安装程序。由于其中一个安装依赖项存在问题,我需要在特定点暂停安装过程以编辑 db.properties
文件。更改该文件后,我可以恢复安装过程。我可以在安装过程中生成一个新进程来执行此操作,但在关闭该进程后出现 "spawn id exp5 not open" 错误。
db_edit.sh
编辑相应的文件:
#!/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
显示如下错误:
PRESS <ENTER> TO CONTINUE: spawn ./db_edit.sh^M
DONEexpect: spawn id exp5 not open
while executing
"expect "Hostname (Default: ):""^M
数据库信息已正确修改,所以我知道脚本有效并且确实生成了。但是,当我关闭该进程时,安装进程的 spawn id 显然也已关闭,这会导致 spawn id exp5 not open
错误。
同样奇怪的是,重生似乎发生在它应该发生的时间之前。对 "PRESS <ENTER>"
的响应应为 "\r"
或 ^M
以指示已发送 ENTER
。
如何解决此问题以在关闭后恢复安装脚本 db_edit.sh
?
不需要自动与该脚本进行任何交互,所以不要使用 spawn
exec db_edit.sh
这样,您就不会干扰当前生成的进程的 spawn_id。