从 tmux 会话中分离除当前终端之外的所有其他终端

从 tmux 会话中分离除当前终端之外的所有其他终端

有没有一种方法可以将所有终端从正在运行的tmux会话中分离出来,除了我实际使用的终端之外?

这看起来有点奇怪,但这样做的意义是为最终用户远程会话保留一些“持久性”层,同时确保用户仅在“一个外壳”上使用系统。

正如所解释的这里,很容易根据用户名创建会话:

if [[ "$TMUX" == "" ]] &&
        [[ "$SSH_CONNECTION" != "" ]]; then
    # Attempt to discover a detached session and attach
    # it, else create a new session
    WHOAMI=$(whoami)
    if tmux has-session -t $WHOAMI 2>/dev/null; then
    tmux -2 attach-session -t $WHOAMI
    else
        tmux -2 new-session -s $WHOAMI
    fi
fi

但我还想确保最后连接的终端是唯一保持连接到用户tmux会话的终端。

它有办法实现这一点吗?我也接受基于screen(或其他多路复用器)的解决方案;)

答案1

如果我正确理解了您的问题,则可以-d选择attach-session执行您想要的操作:

tmux -2 attach-session -d -t $WHOAMI

这会附加到指定的目标会话并分离所有其他客户端。

您可以在附加会话后使用和detach-client选项执行类似的操作:使用 命名客户端,并添加以分离除指定客户端之外的所有客户端。-a-t-t-a

screen还有一个-d选项可以做同样的事情。

相关内容