如何附加到第一个未附加的 tmux 会话,或者如果没有未附加的会话,如何创建一个新会话?

如何附加到第一个未附加的 tmux 会话,或者如果没有未附加的会话,如何创建一个新会话?

如何附加到第一个 tmux 会话没有附加客户端或者,如果没有未附加的会话,请创建一个新会话并附加到该会话?

(用例是我的终端模拟器在打开新终端窗口时运行的命令。我不希望它在每次打开窗口时创建一个新会话,如果周围有分离的会话。我也不希望它创建一个新会话。希望它每次都重新附加到同一个命名会话,如果已经有一个窗口附加到该会话,我希望它回收现有的未附加会话,但在没有未附加会话时创建新会话。)

答案1

可能有一种更简单的方法可以使用 tmux 本身来完成此操作,而无需求助于 shell 脚本。但我通过组合几个脚本让它工作起来。

第一个脚本打印出第一个未附加会话的名称。这是,tmux-first-unattached-session

#!/usr/bin/env sh
# Print the name of the first tmux session that has no clients attached.
tmux ls -F '#{session_name}|#{?session_attached,attached,not attached}' 2>/dev/null | grep 'not attached$' | tail -n 1 | cut -d '|' -f1

第二个脚本附加到第一个未附加的会话或新会话:

#!/usr/bin/env sh
# Attach to the first tmux session that has no attached clients.
# If there are no unattached sessions, then create a new session.
tmux attach -t `,tmux-first-unattached-session` 2> /dev/null || tmux

答案2

我有这样的东西,非常简单。

  1. 检测是否有未附加的会话,尝试附加
  2. 否则开始一个干净的会话
# Start TMUX first; try to reattach a session
if [[ -z $TMUX ]]; then
  ATTACH_OPT=$(tmux ls | grep -vq attached && echo "attach -d")
  exec eval "tmux $ATTACH_OPT"
fi

答案3

我创建了一个tmux2脚本来处理这个问题:

#!/bin/bash
#
# tmux2 - attach to first unattached session or
#         create new session if none are found
#
N=$(tmux ls | grep -v attached | head -1 | cut -d: -f1)

if [[ ! -z $N ]]
then
    ATTACH_OPTS="attach -t $N"
fi

exec tmux -CC $ATTACH_OPTS

就我而言,我使用它与我的 Mac 进行 iterm 连接。连接设置如下:

在此输入图像描述

现在,如果我的终端会话断开,我只需重新连接,它就会从我留下的地方恢复。

相关内容