* 서버에서 자동화를 위해 expect 쉘스크립트를 작성하면서 겪은 문제입니다.


[스크립트 예시]


#!/bin/bash

expect << EOL
spawn telnet 192.168.0.1

expect -timeout 2 "*ogin:"
send "test\n"

expect -timeout 2 "*assword:"
send "test\n"

#expect -timeout 2 "*@TEST_SERVER"
send "exit\n"

sleep 1
expect eof

echo "hahaha"


[실행 결과]


test@TEST_SERVER> exit 


Connection closed by foreign host.

invalid command name "echo"

    while executing

"echo "hahaha""



[원인]

- 위 방식은 expect 사용방식 중 HEREDOC 사용할 경우 시작과 끝을 잘 표시해줘야 한다.

(vscode 에서는 문서 형식을 shell script 로 하면 이상함을 바로 느낄 수 있다.)


expect << EOL   # 시작

...

EOL                 # 끝


- 위 스크립트는 끝부분을 표시해 주지 않아서 expect 관련 명령어로 인식되어 오류가 발생했다.



[수정]

#!/bin/bash

expect << EOL
spawn telnet 192.168.0.1

expect -timeout 2 "*ogin:"
send "test\n"

expect -timeout 2 "*assword:"
send "test\n"

#expect -timeout 2 "*@TEST_SERVER"
send "exit\n"

sleep 1
expect eof
EOL

echo "hahaha"


test@TEST_SERVER> exit 


Connection closed by foreign host.

hahaha



- 정상적으로 expect 종료 후 echo 명령어가 실행된다.




'Programming > Server' 카테고리의 다른 글

[Linux] nohup 사용  (0) 2019.02.01
[Ubuntu] AWS - Ubuntu locale 한글 변경  (0) 2019.01.14
[CentOS 7] iptables 로그 남기기  (0) 2018.12.14
[FCM] 서버측 UnknownHostException  (0) 2018.10.01
[CentOS 7] systemd 기본 설정  (0) 2018.09.30

+ Recent posts