2016-07-22 6 views
3

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을 닫은 후 설치 스크립트를 다시 시작하려면 어떻게해야합니까?

답변

2

가 해당 스크립트와 어떤 상호 작용을 자동화 할 필요가 없기 때문에 spawn

exec db_edit.sh 

이 방법을 사용하지 않는, 당신은 현재 생성 된 프로세스의 spawn_id을 방해하지 않는.