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

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

我正在寻找一个可以像这样运行的 ssh / tmux 解决方案:

  • 如果没有会话,则创建一个
  • 如果存在会话但无人连接,则创建另一个会话

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

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

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

答案1

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

tmux new -A -s <session-name>

如果 session-name 已经存在,-A 标志会使 new-session 的行为类似于 attachment-session

答案2

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

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

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

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

其中,初始字段(“0”)是会话名称,最后一个字段表示是否有人附加到该会话。因此,如果没有人附加,则它将如下所示:

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

如果有些附加了,有些没有,你会得到:

<~> $ 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]

如果找不到任何会话或没有免费会话,请运行tmux new以创建一个。如果找到免费会话,请运行tmux attach -t 1,其中“1”是免费会话的名称。

答案3

我还需要“重新使用任何分离的会话或创建一个”功能。这是我的一行代码(如果在会话名称中使用“:”,则会失败):

tmux attach -t $(tmux ls | grep -v attached | head -1 | cut -f1 -d:) || tmux

答案4

OP 的帖子有点令人困惑,但从原始解决方案“tmux a || tmux || bash”中我推断出:附加到现有的或创建新的 =>

tmux ls | grep -v 附加 && tmux 附加 || tmux

会做。

我更喜欢:.profile 中的“如果存在未附加的 tmux 会话,则连接到它,否则使用 shell”:

tmux ls | grep -v 附加 && tmux 附加

相关内容