如何在Expect脚本中禁用/阻止终端自动换行?
解决Expect SSH连接路由器时的自动换行问题
以下几种方法可以解决终端宽度导致返回数据被自动拆分的问题:
设置超大终端列宽
在登录路由器后,发送stty cols 1000 rows 1000命令,强制告知设备当前终端的列宽足够容纳长数据,不会触发自动换行。示例脚本片段:spawn ssh admin@router-ip expect "Password:" send "your-password\r" expect "Router>" send "stty cols 2000\r" # 之后执行需要获取数据的命令 send "your-command\r"列宽数值可以按需调整,只要超过你预期的最长输出长度即可。
使用
dumb终端类型dumb是一种不支持自动换行、光标移动等高级功能的终端类型,路由器识别到后不会主动给输出内容加换行符。你可以在spawn时直接指定环境变量:spawn env TERM=dumb ssh admin@router-ip或者在脚本开头先设置环境变量:
set env(TERM) "dumb" spawn ssh admin@router-ip调用路由器自带的终端配置命令
多数路由器提供了关闭自动换行的内置命令,比如terminal width 0(0代表无宽度限制)、no terminal length等。登录后先执行这类命令,后续输出就不会被自动拆分:expect "Router>" send "terminal width 0\r"
内容的提问来源于stack exchange,提问作者Graham Leggett
相关产品推荐
相关产品推荐

