tmux 是做什么的?
用于现有的交互式 tmux 会话。对于一次性命令,使用普通 shell。对于新的非交互式后台任务,使用后台执行。
基础操作
tmux ls
tmux list-windows -t shared
tmux list-panes -t shared:0
tmux capture-pane -t shared:0.0 -p
tmux capture-pane -t shared:0.0 -p -S -
目标格式:session:window.pane,例如 shared:0.0。
发送输入
发送字面文本,然后按 Enter:
tmux send-keys -t shared:0.0 -l -- "Please continue"
tmux send-keys -t shared:0.0 Enter
特殊键:
tmux send-keys -t shared:0.0 C-c
tmux send-keys -t shared:0.0 C-d
tmux send-keys -t shared:0.0 Escape
使用 -l -- 发送任意文本。将文本和 Enter 分开发送以避免粘贴/换行意外。
会话管理
tmux new-session -d -s worker
tmux rename-session -t old new
tmux kill-session -t worker
提示检查
tmux capture-pane -t worker-3 -p | tail -20
tmux capture-pane -t worker-3 -p | rg "proceed|permission|Yes|No|❯"
仅在理解提示内容时进行确认/选择:
tmux send-keys -t worker-3 -l -- "y"
tmux send-keys -t worker-3 Enter
辅助工具
scripts/find-sessions.sh:发现会话。scripts/wait-for-text.sh:等待捕获的窗格内容中出现指定文本。
wait-for-text.sh 会搜索回显的输入、回滚缓冲区以及进程输出。对于命令完成检测,使用一个独特的标记,其完整文本在发送给 tmux 的命令中跨参数分割:
nonce="$(od -An -N8 -tx1 /dev/urandom | tr -d ' \n')"
marker="OPENCLAW_DONE_${nonce}"
tmux send-keys -t shared:0.0 -l -- "sleep 4; printf '%s%s\n' 'OPENCLAW_DONE_' '$nonce'"
tmux send-keys -t shared:0.0 Enter
scripts/wait-for-text.sh -t shared:0.0 -p "$marker" -F -T 30
回显的命令永远不会包含完整的标记,而 nonce 防止旧的完成行匹配。
注意事项
capture-pane -p将输出打印到 stdout,用于脚本处理。-S -捕获完整的回滚缓冲区。- tmux 会话在 SSH 断开后仍然保持。