在tmux会话中退出最后一个终端时,可以切换到另一个终端吗?


12

当我退出tmux会话中的最后一个终端时,它将自动关闭tmux并将我返回到父终端。是否可以将tmux切换到另一个已经运行的会话而不是关闭?

我为我处理的每个任务创建了一个新的命名会话,例如TRxxx,电子邮件,暂存器等,当其中一个完成后,我通过在每个终端中运行exit关闭所有终端。当您在会话的最后一个终端中运行exit时,tmux将使您返回到父终端,但是否有可能将其切换到其他打开的会话之一,所以我不必重新连接?

这个问题类似于“ 杀死一个tmux会话并选择另一个tmux会话 ”,但是我想通过退出而不是杀死窗口来关闭终端。

Answers:


2

我得到的最接近的是我编写的tmux函数。我通常通过点击退出外壳Ctrl+ D,所以我编程,tmux打的时候退出和开关会议[PREFIX] Ctrl+ D。将以下内容放入您的.tmux.conf

bind C-d run-shell "                                        \
    if [ #{session_windows} -eq 1 ] &&                      \
       [ #{window_panes}    -eq 1 ] &&                      \
       [ #{pane_current_command}  = 'bash' ]; then          \
        if [ \$(tmux list-sessions | wc -l) -ge 2 ]; then   \
            tmux switch-client -ln;                         \
        fi; tmux kill-session -t \"#S\";                    \
    else                                                    \
        tmux display-message \"Ignoring kill session...\";  \
    fi;                                                     \
    "

点击[PREFIX] Ctrl+,D并且(仅当)仅持有一个没有运行任何其他命令的shell时,它将退出当前会话。如果可能,它将切换到另一个会话。我使用bash shell,因此您可能需要将其更改为正在使用的东西。

ps:以防万一,我目前正在使用tmux 1.9a。


28

我将此添加到我的~/.tmux.conf

set-option -g detach-on-destroy off

当我销毁会话中的最后一个shell时,它将切换到另一个活动会话。所有会话关闭后,tmux退出。


4
正确的答案应该更新为此
cviejo

请向问题发表者请愿。
RichN

重要的是要注意,在分离并重新连接到现有会话时,tmux不会更新该设置。您需要重新启动tmux服务器才能生效。
nyi

2

将这些行添加到您的行中.bashrc并尝试:

if which tmux 2>&1 >/dev/null 
then
    # start a new session if not exist
    test -z ${TMUX} && tmux

    # when quitting tmux, try to attach to other session
    while test -z ${TMUX}; do
        tmux attach || break
    done
fi

1
这几乎是我想要的,但是是否可以更改它,使其仅在我从tmux内部退出时才运行?每当我打开新终端时,此脚本将附加到现有的tmux会话。我尝试为本地内容建立一个tmux会话,然后在ssh时打开一个新终端:转到另一台机器,在该计算机上我将有一个单独的tmux会话,以避免嵌套它们。
David Holm 2014年

不,只要您打开新的终端而不连接到现有终端,此脚本将启动新的tmux会话。您能否提供更多详细信息,“内部tmux”是什么意思?
cuonglm

1
假设我有会话X和Y,其中Y仅打开一个终端。我在Y的最后一个终端中运行“退出”,这将导致会话终止。在这种情况下,我希望tmux切换到会话X而不是终止。但是我不希望在启动新终端时附加/创建tmux会话。
大卫·霍尔姆
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.