我有一个脚本,使用 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 防火墙管理程序卡的语法略有不同。然而,这个问题的角度并不是这里的主题。