首页 > 解决方案 > 如何定位特定的 tmux 会话

问题描述

我有一个脚本,它使用 Tmux 在远程系统上运行命令,有时由于 Tmux 的list-windows命令运行方式而搞砸了。例如,如果我在远程服务器上有两个 Tmux 会话:session1并且session2. 根据我是否在会话 1 或会话 2 中处于活动状态,tmux list-windows从Tmux外部运行会给我两个完全不同的结果:

这是一个例子:

[root:kali:]# tmux ls
session1: 2 windows (created Tue Nov  5 18:22:58 2019)
session2: 3 windows (created Wed Nov  6 18:21:04 2019)

[root:kali:]# tmux list-windows
0: zsh* (1 panes) [215x53] [layout 5de0,215x53,0,0,30] @28 (active)
1: tool (1 panes) [80x24] [layout 5963,80x24,0,0,33] @31
2: script- (1 panes) [215x53] [layout 5de4,215x53,0,0,34] @32

[root:kali:]# tmux a -t session1
[detached (from session session1)]

[root:kali:]# tmux list-windows
0: zsh- (1 panes) [215x53] [layout bb5d,215x53,0,0,0] @0
1: msf* (1 panes) [215x53] [layout dde6,215x53,0,0,27] @25 (active)

在上面的示例中,我所做的只是附加到会话 1,然后从它分离。接下来,在运行时tmux list-windows,您可以清楚地看到它显示的是来自 session1 而不是 session2 的窗口。

Tmux 有没有办法从 Tmux外部简单地列出特定会话中的窗口?从字面上看,这将解决我在很长一段时间内一直面临的所有问题。

标签: bashtmux

解决方案


是的,您可以为大多数 tmux 命令指定特定会话。

tmux list-windows -t session2

-t是您选择附加到某个会话 ( tmux a -t session1) 甚至某个会话/窗口/窗格组合的方式。

例如,如果我有一个 session sess,它有 3 个窗口,每个窗口有 4 个窗格,并且我想htop在第一个窗口、第三个窗格中运行,我会这样做

tmux send-keys -t sess:0.2 'htop' Enter

因为 tmux 中的窗口/窗格是 0 索引的。


推荐阅读