如何针对特定的 tmux 会话

How to target a particular tmux session

我有一个使用 Tmux 在远程系统上执行 运行 命令的脚本,有时它会因为 Tmux 的 list-windows 命令是 运行 的方式而搞砸。例如,如果我在远程服务器上有两个 Tmux 会话:session1session2。根据我是否在会话 1 或会话 2 中活跃,运行ning tmux list-windows from outside of 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,然后从中分离。接下来,当 运行ning tmux list-windows 时,您可以清楚地看到它显示的是来自 session1 而不是 session2 的 windows。

Tmux 有没有一种方法可以简单地列出来自 Tmux 外部 的特定会话的 windows?这将真正解决我长期以来一直面临的所有问题。

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

tmux list-windows -t session2

-t 是您选择附加到特定会话 (tmux a -t session1) 甚至特定 session/window/pane 组合的方式。

例如,如果我有一个会话 sess,它有 3 个 windows,每个有 4 个窗格,我想在第一个 运行 htop window,第三个窗格,我愿意

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

因为 window/panes 在 tmux 中是 0 索引的。