내 예상 스크립트에서는 다른 프롬프트가 나타날 때까지 스페이스바 보내기를 사용 하지만 내가 수행하는 방식으로 인해 스크립트 범위를 벗어날 exp_continue
수 있는 것처럼 보입니다 .$expect_out(buffer)
스크립트는
#!/usr/bin/expect -f
# Set variables
set timeout 300
set SWITCH [lindex $argv 0]
# Its busy time
spawn ssh -o "StrictHostKeyChecking no" $SWITCH -luser
match_max 100000000
expect {
"*assword:"
}
send "password\r"
expect "*>"
send "show run\r"
expect {
"*More*" {send -- " ";exp_continue}
"*>" {send -- "exit\r"}
}
set fid [open $SWITCH.conf w+]
set out $expect_out(buffer)
puts $fid $out
내 셸의 출력에는 전체 출력이 표시됩니다(파일에 기록될 것으로 예상한 내용은 아래에서 잘림)
no telnet server
username admin password .....
username user privilege 5 password .....
!
!
hitless-failover enable
!
end
SSH@TELCO-STACK>
그러나 put 라인에서 작성된 파일에는 다음 내용만 포함됩니다.
^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H ^H^H
!^M
!^M
!^M
end^M
^M
SSH@TELCO-STACK>
stdout에 대한 전체(올바른) 출력을 볼 때 ^H와 출력의 마지막 몇 줄만 파일에 기록되는 이유는 무엇입니까?
답변1
예상 매뉴얼 페이지에는 다음과 같이 나와 있습니다.
패턴(또는 eof 또는 full_buffer)을 일치시킨 후 일치하는 출력과 이전에 일치하지 않은 출력은 변수에 저장됩니다
expect_out(buffer)
.
즉, 캐릭터만 얻을 수 있습니다.지난번 "더보기" 이후.
다음 명령이 필요할 수도 있습니다 log_file
.
#!/usr/bin/expect -f
set timeout 300
set SWITCH [lindex $argv 0]
spawn ssh -o "StrictHostKeyChecking no" $SWITCH -luser
match_max 100000000
expect "*assword:"
send "password\r"
expect "*>"
log_file /some/log/file
send "show run\r"
expect {
"*More*" {send -- " ";exp_continue}
"*>" {send -- "exit\r"}
}