图像与设计
用 tmux 分离会话以编程方式驱动交互式 CLI…
当需要自动化运行必须依赖真实终端的交互式命令(编辑器、REPL、交互式 git 等)时,用 tmux 分离会话配合 send-keys/capture-pane 进行控制。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
用 tmux 分离会话以编程方式驱动交互通用
解决思路
- 创建分离会话并启动交互式命令:`tmux new-session -d -s <name> <command>`(如需指定工作目录加 `-c /path/to/repo`)。
- 等待命令初始化:发送输入或捕获输出前先 sleep 100-500ms(如 `sleep 0.3`),否则屏幕可能为空。
- 用 `tmux send-keys -t <name> 'text' Enter` 发送输入;特殊键作为独立参数传入,如 Enter、Escape、C-c、C-x、Up/Down/Left/Right、Space、BSpace。
- 用 `tmux capture-pane -t <name> -p` 捕获当前屏幕内容以查看输出,按需重复「发送输入 → 捕获输出」循环。
- 完成后用 `tmux kill-session -t <name>` 清理会话;可用 `tmux has-session -t name 2>/dev/null` 检查是否已存在,用 `tmux list-sessions` 列出会话。
- Python REPL 示例:`tmux new-session -d -s python python3 -i`,然后 `tmux send-keys -t python 'import math' Enter`、`tmux send-keys -t python 'print(math.pi)' Enter`,再 `tmux capture-pane -t python -p` 查看结果,最后 kill-session。
- Vim 编辑示例:`tmux new-session -d -s vim vim /tmp/file.txt`,`sleep 0.3`,再 `tmux send-keys -t vim 'i' 'New content' Escape ':wq' Enter` 完成保存退出。
- 交互式 git rebase 示例:`tmux new-session -d -s rebase -c /repo/path git rebase -i HEAD~3`,`sleep 0.5`,`tmux capture-pane -t rebase -p` 查看编辑器,再用 `tmux send-keys -t rebase 'Down' 'Home' 'squash' Escape` 和 `tmux send-keys -t rebase ':wq' Enter` 修改指令并保存。
- 可选用封装脚本简化操作(如 tmux-wrapper.sh):`start <session-name> <command> [args...]`、`send <session-name> 'text' Enter`、`capture <session-name>`、`stop <session-name>`。
- 避免常见错误:不要用 `'\n'` 代替 Enter(必须用 tmux 键名 `Enter`);发送命令后必须显式发送 Enter 才会执行;始终在结束时 kill 会话以防残留。
适用边界 · 注意事项
- 简单的非交互式命令——直接用普通 Bash 工具即可。
- 可通过 stdin 重定向传入输入的命令。
- 不需要任何交互的一次性命令。