将预期缓冲区保存在范围之外?

将预期缓冲区保存在范围之外?

在我的期望脚本中,我使用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

我的 shell 的输出显示了完整的输出(我期望写入文件的内容,下面被剪掉了)

    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>

当我看到标准输出的整个(正确)输出时,为什么只有 ^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"}
}

相关内容