如何定位特定的 tmux 会话

Lew*_*uce 2 bash tmux

我有一个使用 Tmux 在远程系统上运行命令的脚本,有时它会由于 Tmuxlist-windows命令的运行方式而出错。例如,如果我在远程服务器上有两个 Tmux 会话:session1session2。根据我是否在会话 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)
Run Code Online (Sandbox Code Playgroud)

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

Tmux 有没有办法简单地从 Tmux外部列出特定会话中的窗口?这实际上可以解决我相当长一段时间以来一直面临的所有问题。

jer*_*ile 6

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

tmux list-windows -t session2
Run Code Online (Sandbox Code Playgroud)

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

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

tmux send-keys -t sess:0.2 'htop' Enter
Run Code Online (Sandbox Code Playgroud)

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