如何在期望文件中输出多页输出而不记录选项提示

如何在期望文件中输出多页输出而不记录选项提示

我有一个脚本,使用 Expect 通过 SSH 在计算机上运行一些命令。脚本的一部分发出命令,导致多页输出,我想将其保存到文件中。

我怎样才能只输出期望脚本的那部分到文件,而不让它也把按键提示符记录到日志中。

我所拥有的是以下

expect "something"
send "command that causes multi-page output with --More-- or (q)uit options\r"

#looping through output so that all pages are shown

log_file -noappend file.log #logging should start now

expect {
    -ex "--More--" {
        send "\r";
        exp_continue;
    }
} #I want to have output of only this part of expect script
# everything since last command before loop is issued to end of loop

log_file #Logging should stop here

send "other commands"

如何仅将循环输出添加到文件中,而不将“--More-- 或 (q)uit”添加到日志文件中。

日志还包含循环之前、设置 log_file 之前的最后一次发送,以及循环之后、删除 log_file 之后的第一个提示,我可以轻松地将其删除,所以这不是一个大问题。

--More-- or (q)uit^M ^M我的主要问题是其中包含日志文件。

所以日志看起来像这样:

actual command output lines I want
...
--More-- or (q)uit^M                  ^M"actual command output line I want"
--More-- or (q)uit^M                  ^M"actual command output line I want"

如何将循环的输出记录到文件中,而不将“更多”和“退出”选项附加到日志中?

答案1

网络设备输出的暂停是为了人类操作员的使用。

使用自动化工具时,最好的方法是使用设备使用的任何本机机制/语言来告诉它禁用此类页面。

如果我们谈论的是 Cisco,这些设置是针对每个会话的,而不是整个系统范围的,因此必须在需要该设置的每个脚本的开头发出它们。

在处理 Cisco 路由器/交换机时,我通常发送命令:

terminal length 0

或者用期待的说法

send "terminal lenght 0\r"

附言。请注意,实际终端长度语法可能会因 Cisco 操作系统而异,例如,Cisco 防火墙管理程序卡的语法略有不同。然而,这个问题的角度并不是这里的主题。

相关内容