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

1 login gnu-screen tmux session

有没有办法从正在运行的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
Run Code Online (Sandbox Code Playgroud)

但我也想确保最后一个连接的终端是唯一一个仍然连接到用户tmux会话的终端。

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

Ste*_*itt 5

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

tmux -2 attach-session -d -t $WHOAMI
Run Code Online (Sandbox Code Playgroud)

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

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

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