自动化与脚本
需要保持串口/SSH/本地 Shell 交互会话上下文时…
适用于串口终端、SSH 交互 Shell、本地 Shell、设备控制台、AT/CLI 菜单等需要保持登录/菜单/REPL/CLI 上下文并反复发送和读取输出的场景。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
需要保持串口/SSH/本地 Shell 特定
解决思路
- 环境级配置 `config.json` 为空对象 `{}`;交互终端关键参数通常和具体会话绑定,优先通过 `start` 命令显式传入,避免误连设备或误用凭据。
- 会话运行时状态保存到工作区 `.embeddedskills/state.json`,使用 `terminal_sessions` 字段记录会话名、后端、PID、TCP 控制端口和日志路径。
- 参数优先级从高到低:CLI 参数(`--port`, `--baudrate`, `--host`, `--name` 等) > `.embeddedskills/state.json` 中已启动的 `terminal_sessions` > 默认值。
- 使用 `start` 启动一个后台交互会话。
- 使用 `list` 列出现有会话。
- 使用 `status` 查询单个会话状态。
- 使用 `send` 向会话写入文本或 Hex 数据。
- 使用 `read` 读取并清空会话输出缓冲。
- 使用 `attach` 前台行模式接入会话。
- 使用 `stop` 停止会话并清理状态。
- 串口控制台、AT 命令、Bootloader 菜单、板卡 CLI 选择 `serial` 后端,依赖 `pyserial`。
- Linux 开发板交互 Shell、登录后持续操作选择 `ssh` 后端,依赖 OpenSSH 客户端。
- 本机临时 Shell、REPL、CLI 程序交互选择 `local` 后端,依赖 Python 标准库。
- 所有脚本位于 skill 目录的 `scripts/` 下,通过 `python` 直接调用。
- 启动串口终端:`python scripts/terminal_session.py start serial --port COM11 --baudrate 115200 --name board`。
- 启动 SSH 终端,`host` 使用 `~/.ssh/config` 中的 Host 别名:`python scripts/terminal_session.py start ssh --host 1380-P904 --name devboard`。
- 启动本地 Shell:`python scripts/terminal_session.py start local --name local-shell`。
- 发送一行命令并追加 CRLF:`python scripts/terminal_session.py send board "help" --crlf`。
- 读取输出,最多等待 1 秒:`python scripts/terminal_session.py read board --timeout 1`。
- 前台行模式接入:`python scripts/terminal_session.py attach board`。
- 查询与停止:`python scripts/terminal_session.py list`、`python scripts/terminal_session.py status board`、`python scripts/terminal_session.py stop board`。
- 会话元数据保存到工作区 `.embeddedskills/state.json`,`terminal_sessions` 中每个会话记录 `backend`、`tcp_port`、`pid`、`started_at`。
- 后台进程日志保存到 `.embeddedskills/logs/terminal/`。
- 脚本默认输出 JSON,包含 `status`、`action`、`summary`、`details`;错误输出包含 `status`、`action`、`error.code`、`error.message`。
- 先判断是否真的需要保持交互状态;若只是一次性远程命令,优先使用 `ssh`;若只是串口抓日志,优先使用 `serial`。
- 选择后端:串口控制台用 `serial`,远程 shell 用 `ssh`,本机交互程序用 `local`。
- `start` 后先 `read --timeout 1` 获取启动横幅、登录提示或 shell prompt。
- 每次 `send` 后都用 `read --timeout <秒>` 观察反馈,再决定下一步。
- 完成后执行 `stop`,避免后台进程长期占用串口、SSH 连接或本地 Shell。
- 不自动猜测串口端口、波特率、SSH Host 或登录凭据。
- 未明确用途时不主动发送任何会改变设备状态的命令。
- 多个会话必须使用不同 `--name`,避免输出混淆。
- `read` 会清空当前输出缓冲;重要输出需要及时记录到最终回复。
- `attach` 是行模式,不等同于完整 TTY/raw 模式;需要全屏程序、vim、top、交互式密码输入时,优先让用户使用真实终端工具。
- 串口会话会独占真实串口;如果需要和外部串口工具共享端口,先使用 `serial` skill 的 mux 能力。
- SSH 后端使用 `~/.ssh/config` 的 Host 别名;配置主机、跳板机、传输文件仍交给 `ssh` skill。
- 失败时保留真实错误:端口占用、缺少 `pyserial`、`ssh` 不存在、Host 别名无法解析、进程已退出等都不要吞掉。
适用边界 · 注意事项
- 需要全屏程序、vim、top、交互式密码输入时,`attach` 行模式不适用,应使用真实终端工具。
- 只需要一次性远程命令或只需串口抓日志时,不应使用 terminal 保持交互会话,优先使用 `ssh` 或 `serial`。
- 需要与外部串口工具共享真实串口且未使用 `serial` skill 的 mux 能力时,串口会话会独占端口,不适用。