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