我正在寻找一个 ssh/tmux 解决方案,它会像这样:
主要是我希望能够为同一台服务器创建新会话,显然如果有多个会话没有人连接到它,它应该选择第一个。
这应该使我能够将此作为 ssh 连接的默认命令。
我当前的解决方案ssh -t 'tmux a || tmux || /bin/bash'
没有按预期工作,因为当您再次尝试连接时,它将连接到现有会话,在这种情况下,我想要一个新的。
小智 8
我不确定从什么版本开始,但现在你可以使用
tmux new -A -s <session-name>
Run Code Online (Sandbox Code Playgroud)
如果会话名称已存在,则 -A 标志使新会话的行为类似于附加会话
这是一个奇怪的用例,但是您需要做的是围绕 tmux 编写一个包装器(称之为它mytmux
或其他东西):
tmux ls
并解析输出,寻找未附加的内容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”是空闲会话的名称。