Design & Development

cygwin에서 expect 사용 시 에러 나는 경우

local pc 에서 작업 후 ftp로 서버에 파일 업로드하고 웹서버 재기동하는 일련의 절차가 번거로워서 간단하게 쉘스크립트를 하나 짰다. 첫 버전은 단순한거여서 인자로 작업 파일명 던져주면 해당 파일 찾아서 서버의 적절한 디렉토리에 업로드해주는 기능까지만 한다. 막상 테스트하다 보니 기왕 손댄거 웹서버 재기동위해 텔넷 접속하는 것도 마저 자동화하는게 낫겠다 싶어 expect 를 이용해서 기능 추가.

oops!

expect: invalid spawn id (4)

콘솔에서 이런 에러 뱉어내며 expect 실행이 중단되었다. 구글링 결과 …
cygwin 에서 expect 쓸 때 발생하는 에러로 윈도우 내장 telnet 프로그램이 send 명령어를 제대로 처리하지 못해서 발생하는 문제였다.
cygwin 용 패키지 중 inetutil 에 포함된 telnet 프로그램을 추가로 설치하고 스크립트 다시 테스트해보니 잘 작동.

#!/usr/bin/expect -f
set HOST ***.***.com
set USER *****
set PASSWD *****

set timeout -1
spawn telnet $HOST
expect -re “login: ”
send “$USER\r”
expect -re “Password:”
send “$PASSWD\r”
sleep 1
send “/…./adapcctl.sh stop\r”
sleep 5
send “/…./adapcctl.sh start\r”
sleep 5
send “exit\r”
interact

이런 잡다구니한 일도 심심풀이로 괜찮긴 하지만 본업으로 빨리 돌아가고 잡다 T.T

[03-02 추가] Expect 가 tcl 로 만들어진 프로그램이라 같은 방식으로 인자값을 처리할 수 있다.

set HOST [lindex $argv 0]
set USER [lindex $argv 1]

Advertisements

One thought on “cygwin에서 expect 사용 시 에러 나는 경우

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s