tmuxセッションの最後の端末を終了すると、別の端末に切り替えることができますか?


12

tmuxセッションの最後のターミナルを終了すると、自動的にtmuxが閉じ、親ターミナルに戻ります。代わりに、tmuxを閉じる代わりに別の実行中のセッションに切り替えることはできますか?

TRxxx、電子メール、スクラッチなど、取り組んでいるすべてのタスクに対して新しい名前付きセッションを作成し、それらのいずれかが終了したら、すべてのターミナルでexitを実行してすべてのターミナルを閉じます。セッションの最後のターミナルでexitを実行すると、tmuxは親ターミナルに戻りますが、代わりに他の開いているセッションの1つに切り替えるだけで、再接続する必要はありませんか?

この質問は「tmuxセッションを強制終了し、別のtmuxセッションを選択する」に似ていますが、ウィンドウを強制終了するのではなく、exitを使用して端末を適切に閉じたいと考えています。

回答:


2

私が得た最も近いものは私が書いたtmux関数でした。通常はCtrl+を押してシェルを終了するDので、+をtmux押したときに終了してセッションを切り替えるようにプログラムしました。以下をあなたの中に入れてください:[PREFIX] CtrlD.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と、それは他のコマンドを実行していないだけで1つのシェルを保持している(している場合のみ)場合、それは現在のセッションを終了します。可能であれば、別のセッションに切り替えます。私はbashシェルを使用しているので、使用しているものに変更する必要があるかもしれません。

ps:必要に応じて、現在tmux 1.9aを使用しています。


28

私はこれを私のに追加しました~/.tmux.conf

set-option -g detach-on-destroy off

セッションの最後のシェルを破棄すると、別のアクティブなセッションに切り替わります。すべてのセッションが閉じたら、tmux終了します。


4
正解はこれに更新する必要があります
cviejo 2016年

質問のポスターを嘆願してください。
RichN

tmuxは、既存のセッションを切り離して再接続するときにその設定を更新しないことに注意することが重要です。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セッションを作ってみて、別のtmuxセッションを持つ別のマシンにssh:ingするときに新しいターミナルを開いて、それらがネストされないようにします。
David Holm

いいえ、このスクリプトは、既存のターミナルに接続せずに、新しいターミナルを開くたびに新しいtmuxセッションを開始します。詳細を教えていただけますか、「tmux内」とはどういう意味ですか?
cuonglm 2014年

1
セッションXとYがあり、Yが開いている端末は1つだけだとします。Yの最後のターミナルで「exit」を実行すると、セッションが終了します。この場合、tmuxを終了せずにセッションXに切り替えたいと思います。しかし、新しいターミナルを起動するたびにtmuxセッションをアタッチ/作成したくありません。
David Holm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.