GNUscreen
有一个命令,at
它允许你通过发送来控制其他会话屏幕命令。tmux
有类似的东西吗?我试过send-prefix
和send-keys
,但那些将密钥发送到正在运行的进程里面tmux;您不能使用它们来控制 tmux 本身。
尝试通过执行以下操作来发送控制命令:
send-keys -t main:1 "tmux select-window -t :1" ENTER
如果内部进程不是 shell,则不起作用。如果您从链接会话发送密钥,即使内部进程是 shell,它也会失败。(在这种情况下,您的当前会话是受影响的会话。)
答案1
尽管它是可选的,但目标窗口说明符tmux窗口命令 accept(即它们的-t
和-s
选项)可以直接在任何会话中指定一个窗口。目标窗口的语法如下:
- 会议
:
窗户在哪里- 会议是
- 客户端的说明符(指定该客户端的当前会话),或
- 精确、前缀或fnmatch(3)(即“glob”)匹配会话名称,并且
- 窗户是
- 窗口索引,或
- 精确、前缀或fnmatch(3)下的窗口名称会议。
- 会议是
- 窗户(仅当说明符中没有冒号时)其中
- 窗户与上述相同,只是它仅限于当前会话。
第二种形式可能是最常用的形式,但听起来您在情况下想要的是第一种形式。
您应该能够运行此命令:
tmux select-window -t main:1
可以从任何地方实现你的目标。例如,它可以从完全在tmux会话(例如通过计划任务) — 只要您提供任何非默认-L
或-S
tmux
选项值,以便命令可以找到服务器的套接字。
您还可以将其作为绑定(例如在~/.tmux.conf
文件中或在tmux :
提示;根据需要调整键说明符):
bind-key C-m select-window -t main:1
然后,您可以在具有此绑定的任何服务器的任何会话所附加的任何客户端中键入您的前缀和 Cm,它将把匹配的会话切换main
到索引 1 处的窗口。
“目标说明符”语法在“命令”部分中描述tmux手册页(搜索 、、target-client
或的第一次出现以查找相关描述)。target-session
target-window
target-pane
我从来没有用过屏幕的at
命令,但它似乎还具有迭代功能。目前没有直接匹配tmux,但通过解析list-clients
、、list-sessions
和list-windows
(list-panes
较新版本的tmux有-F
这些命令的选项可以帮助生成更容易解析的输出)。