我正在使用Telnet向Mikrotik路由器发送命令。
telnet 192.168.100.100 -l admin
Password: pass1234
[admin@ZYMMA] > /interface pppoe-server remove [find user=aspeed13]
[admin@ZYMMA] > quit
它运行良好。
现在我想使用expect tcl脚本自动化它:
#!/usr/bin/expect --
spawn telnet 192.168.100.100
expect "Login:"
send "admin\r"
expect "Password:"
send "pass1234\r"
expect "\[admin@ZYMMA\] >"
send "/interface pppoe-server remove \[find user=aspeed13\]\r"
expect "\[admin@ZYMMA\] >"
send "quit\r"
它能够工作,但在身份验证后(第6行:send "pass1234\r"
),当路由器CLI正在加载时,它会冻结大约10秒,并显示以下字符:^ [[? 6c ^ [[24; 3R
然后脚本运行正常。
我的问题是为什么手动访问Telnet时加载速度很快,而通过expect脚本访问时需要太长时间?我在论坛中阅读有关Telnet自动化的内容,他们说Telnet很慢,但由于手动方式太快,为什么使用expect需要花费时间才能加载?
expect
是tcl
,不是bash
。 - ninjaljexpect
行替换为expect -re ">"
,它是否有效? - ninjaljexp_internal 1
来查看 expect 如何进行匹配。 - glenn jackman