tmux 附加到现有会话或创建新会话

sor*_*rin 4 tmux

我正在寻找一个 ssh/tmux 解决方案,它会像这样:

  • 如果没有会话,则创建一个
  • 如果有一个会话并且没有人连接到它,则创建另一个会话

主要是我希望能够为同一台服务器创建新会话,显然如果有多个会话没有人连接到它,它应该选择第一个。

这应该使我能够将此作为 ssh 连接的默认命令。

我当前的解决方案ssh -t 'tmux a || tmux || /bin/bash'没有按预期工作,因为当您再次尝试连接时,它将连接到现有会话,在这种情况下,我想要一个新的。

小智 8

我不确定从什么版本开始,但现在你可以使用

tmux new -A -s <session-name>
Run Code Online (Sandbox Code Playgroud)

如果会话名称已存在,则 -A 标志使新会话的行为类似于附加会话

  • 这是最简单的,它完成了这项工作,只使用一个命令而不是 2+ 和 `tmux attach || tmux 新组合。干杯! (4认同)

Joe*_*nte 2

这是一个奇怪的用例,但是您需要做的是围绕 tmux 编写一个包装器(称之为它mytmux或其他东西):

  1. 调用tmux ls并解析输出,寻找未附加的内容
  2. 附加到第一个非附加会话,-或-
  3. 如果没有找到空闲会话,则创建一个会话并附加到它

tmux ls如果有任何会话,该命令应返回类似以下内容:

<~> $ tmux ls
0: 1 windows (created Mon Sep 16 21:42:16 2013) [120x34] (attached)
Run Code Online (Sandbox Code Playgroud)

其中初始字段(“0”)是会话名称,最后一个字段表示是否有人附加到该会话。因此,如果没有人附加,它会看起来像这样:

<~> $ tmux ls
0: 1 windows (created Mon Sep 16 21:42:16 2013) [120x34]
Run Code Online (Sandbox Code Playgroud)

如果有些已附加而有些未附加,您会得到:

<~> $ tmux ls
0: 1 windows (created Mon Sep 16 21:42:16 2013) [120x34] (attached)
1: 1 windows (created Mon Sep 16 21:43:30 2013) [120x34]
Run Code Online (Sandbox Code Playgroud)

如果您发现根本没有会话或没有空闲会话,请运行tmux new以创建一个。如果您找到空闲会话,请运行tmux attach -t 1其中“1”是空闲会话的名称。