在Bash环境下的Telnet终端中实现多行粘贴时添加行间延迟的方法
在Bash环境下的Telnet终端中实现多行粘贴时添加行间延迟的方法
刚好遇到过类似的困扰,给你几个实用的解决办法,亲测能解决固件处理慢导致的粘贴丢命令问题:
方法一:用Expect脚本(最靠谱的交互式处理方案)
Expect专门用来处理像Telnet这种交互式命令行场景,能精确控制命令发送的时机和延迟。
- 先创建一个脚本文件,比如
telnet_cmds.exp,内容如下:
#!/usr/bin/expect # 替换成你的设备IP和端口 spawn telnet 192.168.1.1 23 # 下面的匹配字符串要根据你的固件登录提示调整,比如有的是"Username:"或者直接进入命令行 expect "login:" send "admin\r" expect "Password:" send "123456\r" # 逐个发送命令,每个命令后加1秒延迟(可根据固件速度调整数值) send "show status\r" sleep 1 send "config network\r" sleep 1 send "save config\r" sleep 1 # 保持会话让你继续操作,不需要的话可以换成exit interact
- 给脚本添加执行权限:
chmod +x telnet_cmds.exp
- 运行脚本:
./telnet_cmds.exp
这个方法的好处是完全不需要手动粘贴,脚本自动完成所有步骤,延迟时间也能精准控制。
方法二:用Bash循环+延迟读取命令文件
如果不想用Expect,也可以把要执行的命令存成文件,用Bash循环逐个发送,中间加延迟。
- 先创建一个命令文件
cmds.txt,每行一个命令:
show status config network save config
- 写一个Bash脚本
telnet_with_delay.sh:
#!/bin/bash # 替换成你的设备IP和端口 telnet 192.168.1.1 23 << EOF $(while read -r cmd; do echo "$cmd" sleep 1 # 延迟1秒,按需调整 done < cmds.txt) EOF
- 同样给脚本加执行权限后运行:
chmod +x telnet_with_delay.sh ./telnet_with_delay.sh
注意:如果Telnet会话提前退出,可能需要调整延迟时间,或者在脚本里加上等待登录的逻辑(不过这部分还是Expect更擅长)。
方法三:调整终端的输入延迟(临时生效)
如果还是想手动粘贴,可以在Telnet会话里调整终端的输入规范,让系统自动给每行命令加延迟:
进入Telnet会话后,先输入这个命令:
stty icanon 1 10
这里的10代表等待1秒(因为stty的time参数是十分之一秒为单位),你可以根据实际情况改成5(0.5秒)或者20(2秒)。设置后再粘贴多行命令,终端会自动在每行之间等待指定的时间。
不过这个方法的兼容性可能差点,有的终端或者固件可能不支持,你可以试试。
备注:内容来源于stack exchange,提问作者ysap
相关产品推荐
相关产品推荐

