범위 외부에 예상된 버퍼를 저장하시겠습니까?

범위 외부에 예상된 버퍼를 저장하시겠습니까?

내 예상 스크립트에서는 다른 프롬프트가 나타날 때까지 스페이스바 보내기를 사용 하지만 내가 수행하는 방식으로 인해 스크립트 범위를 벗어날 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"}
}

관련 정보