tmux附加到现有的会议或创build新的

我正在寻找这样的ssh / tmux解决scheme:

  • 如果没有会话,创build一个
  • 如果有一个会话,没有人连接到它,创build另一个

主要是我想能够创build新的会话到同一台服务器,显然如果有多个会议没有人连接到它,它应该select第一个。

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

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

这是一个奇怪的用例,但是你需要做的是在tmux上写一个包装器(称之为mytmux或者其他):

  1. 调用tmux ls并分析输出,寻找没有附加的东西
  2. 附加到第一个未附加的会话, – 或 –
  3. 创build一个会话,如果没有空闲会议被发现并附加到它

如果有任何会话,命令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来创build一个会话。 如果find空闲会话,请运行tmux attach -t 1 ,其中“1”是空闲会话的名称。

我还需要“重新使用任何分离的会话或创build一个”function。 这是我的一行(如果你在会话名称中使用“:”,将会惨败):

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

我不知道自什么版本,但现在你可以使用

 tmux new -A -s <session-name> 

如果session-name已经存在,-A标志使得新会话的行为与attach-session相同