시스코 장비에 로그인하기 위해 작은 Expect 스크립트를 작성했습니다. 한 번 로그인하면 반복적으로 명령을 실행하고 grep
출력을 원합니다.Expect와 BASH 믹싱
#!/usr/bin/expect
send_user "Device name: "
expect_user -re "(.*)\n"
set host $expect_out(1,string)
send_user "Username: "
expect_user -re "(.*)\n"
set user $expect_out(1,string)
stty -echo
send_user -- "Password: "
expect_user -re "(.*)\n"
set pass $expect_out(1,string)
stty echo
send_user "show int "
expect_user -re "(.*)\n"
set intf $expect_out(1,string)
send_user "\n"
spawn telnet $host
expect "Username:"
send "$user\r"
expect "Password:"
send "$pass\r"
expect ">"
이 시점에서 우리는 "show int xxx"명령을 반복적으로 실행하고 특정 줄의 출력을 grep하려고합니다. grep
이 Expect에 없으며 sleep
과 같은 명령이 없으므로 show int
명령을 실행하여 특정 회선 밖으로 grepping
명령을 실행할 수 있습니다. Expect와 Bash를 어떻게 섞을 수 있습니까?
업데이트 : : 이제 스크립트를 거의 완료했습니다.이 마지막 장애물을 극복하고 나면 전체 스크립트를 게시합니다. 줄 set bytesnow [exec grep "packets input" \< showint | cut -d \ -f 9]
이 오류를 던지고 있습니다.
child process exited abnormally
while executing
"exec grep "packets input" < \showint | cut -d \ -f 9"
하지만 테스트 스크립트에서 제대로 작동합니다. ./showint 파일이 있습니다. 명령 행에서이 명령을 실행해도 문제가 없습니다. 나는 틀린 것을 해결할 수 없다?
UPDATE : 더 조사 (http://wiki.tcl.tk/8489)에는 패턴 일치 명령을 넣어 찾을 수 없습니다 의미 상태 코드 1과 grep
종료가에서 잘 작동하는지 나에게 보여 주었다 커맨드 라인?/full/path/to/showint와 함께조차.
end : 나는 바보가 무엇인지 깨닫고 실수를 고쳤습니다. 모든 도움을 주셔서 감사합니다 : D는
하! Typo, corrected, cheers;) – jwbensley
글쎄, 라우터 9에서 # 9 필드를 찾고있는 것 같습니다. int | i 패킷 입력 '필드에 공백을 구분 기호로 사용합니다. 출력물에는 8 개의 필드 만 있습니다. 당신이 성취하고자하는 것을 우리에게 말할 수 있습니까? '798518177 패킷 입력, 60933723489 바이트, 0 버퍼 없음' –
resmon6
스위치/라우터의 출력 라인이 라인을 들여 쓰기 시작할 때 공백이 있기 때문에 "-f 9"를 사용했습니다. 나는 그 출력 라인의 바이트 값에 따라 나아가고있다. 바닥에있는 내 대답을보십시오. 고마워 :) – jwbensley