Expect 스크립트를 사용하여 프로그램 설치를 자동화하고 있습니다. 설치 종속성 중 하나의 문제로 인해 특정 지점에서 설치 프로세스를 일시 중지하여 db.properties
파일을 편집해야합니다. 해당 파일이 변경되면 설치 프로세스를 다시 시작할 수 있습니다. 설치를 진행하는 동안 새 프로세스를 생성 할 수는 있지만 프로세스를 닫은 후에 "spawn id exp5 not open"오류가 발생합니다.새 프로세스 생성 및 예상 스크립트로 돌아 가기
#!/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
다음과 같은 오류를 보여줍니다 :
#!/usr/bin/sh
filename=db.properties
sed -i "s/<some_regex>/<new_db_info>/g" $filename
내 자동 설치 스크립트의 실행의 중간에 위의 스크립트를 생성합니다 :
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
을 닫은 후 설치 스크립트를 다시 시작하려면 어떻게해야합니까?