tmux 会话控制技能用于通过发送按键和读取输出来控制 tmux 会话,是管理 Claude Code 等交互式 CLI 会话的常用手段。
适用场景
- 在 tmux 中监控 Claude/Codex 会话
- 向交互式终端应用发送输入
- 抓取 tmux 中长期运行进程的输出
- 以编程方式在 tmux 窗格/窗口间导航
- 检查已有会话中的后台工作
不适用场景
- 运行一次性 shell 命令:应直接使用 exec 工具
- 启动新的后台进程:应使用 exec 并设置 background:true
- 非交互式脚本:应使用 exec 工具
- 进程不在 tmux 中
- 需要创建新的 tmux 会话:应使用 exec 配合 tmux new-session
示例会话
- shared:主交互会话
- worker-2 至 worker-8:并行工作会话
常用命令 列出会话: tmux list-sessions tmux ls
捕获输出:
窗格最后 20 行
tmux capture-pane -t shared -p | tail -20
完整回滚历史
tmux capture-pane -t shared -p -S -
窗口中指定窗格
tmux capture-pane -t shared:0.0 -p
发送按键:
发送文本(不按回车)
tmux send-keys -t shared "hello"
发送文本并回车
tmux send-keys -t shared "y" Enter
发送特殊按键
tmux send-keys -t shared Enter tmux send-keys -t shared Escape tmux send-keys -t shared C-c # Ctrl+C tmux send-keys -t shared C-d # Ctrl+D (EOF) tmux send-keys -t shared C-z # Ctrl+Z (suspend)
窗口/窗格导航:
选择窗口
tmux select-window -t shared:0
选择窗格
tmux select-pane -t shared:0.1
列出窗口
tmux list-windows -t shared
会话管理:
创建新会话
tmux new-session -d -s newsession
终止会话
tmux kill-session -t sessionname
重命名会话
tmux rename-session -t old new
安全发送输入 对于交互式 TUI(Claude Code、Codex 等),应将文本与回车拆分为两次发送,以避免粘贴/多行边界情况: tmux send-keys -t shared -l -- "Please apply the patch in src/foo.ts" sleep 0.1 tmux send-keys -t shared Enter
Claude Code 会话模式 检查会话是否需要输入:
查找提示符
tmux capture-pane -t worker-3 -p | tail -10 | grep -E "❯|Yes.*No|proceed|permission"
批准 Claude Code 提示:
发送 'y' 并回车
tmux send-keys -t worker-3 'y' Enter
或选择编号选项
tmux send-keys -t worker-3 '2' Enter
检查所有会话状态: for s in shared worker-2 worker-3 worker-4 worker-5 worker-6 worker-7 worker-8; do echo "=== $s ===" tmux capture-pane -t $s -p 2>/dev/null | tail -5 done
向会话发送任务: tmux send-keys -t worker-4 "Fix the bug in auth.js" Enter
注意事项
- 使用 capture-pane -p 输出到 stdout(脚本化时必需)
- -S - 捕获完整回滚历史
- 目标格式:session:window.pane(例如 shared:0.0)
- 会话在 SSH 断开后仍会保持