You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expect脚本中Socat连接思科交换机后expect命令不生效如何解决?

问题根因

你当前的脚本直接执行socat.exe命令时,socat会作为前台阻塞进程运行,脚本控制权会被socat完全占用,后续的send、expect等交互指令不会被执行。

修复方案

Expect 控制外部进程交互必须通过spawn关键字启动目标进程,才能接管进程的输入输出流执行后续交互逻辑,修正后的脚本如下:

#!/usr/bin/expect -f
# 设置全局超时时间30秒,避免串口响应慢导致匹配失败
set timeout 30
# 用spawn启动socat进程,expect接管交互
spawn socat.exe `tty`,raw,echo=0 /dev/ttyS4,raw,echo=0,sane
# 串口初始化等待时间调整为1秒,原10毫秒过短无法完成初始化
after 1000
send "\r"
expect "*switch1>"
send "enable\r"
expect "*assword:"
send "PASSWORD\r"
expect "*#"
send "sh ip int brief\r"
# 执行完命令后可以加expect等待输出,避免脚本直接退出
expect "*#"
send "exit\r"

额外调整说明

  • 移除了socat参数中的setsid,避免进程脱离当前会话导致expect无法接管
  • 放宽了提示符的匹配规则,开头加了*通配符,适配串口输出可能存在的前置乱码、空行等情况
  • 最后增加了执行完命令后的匹配逻辑,避免脚本在命令输出完成前提前终止

内容的提问来源于stack exchange,提问作者DeathS7roke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:09:05