Виходячи з останнього терміналу в tmux сесії, чи може він перейти на інший?


12

Коли я вийду з останнього терміналу під час сеансу tmux, він автоматично закриє tmux і поверне мене до батьківського терміналу. Чи можливо замість закриття tmux перейти на інший, вже запущений, сеанс замість закриття?

Я створюю новий названий сеанс для кожного завдання, над яким я працюю, наприклад TRxxx, електронна пошта, подряпини тощо, і коли я закінчую з одним із них, закриваю всі термінали, запускаючи вихід у кожному. Коли ви запустите вихід в останньому терміналі сеансу, tmux поверне вас до батьківського терміналу, але чи можна змусити його просто перейти на один з інших відкритих сеансів, тому мені не доведеться повторно вкласти?

Це питання схоже на " Убити сеанс tmux та вибрати інший сеанс tmux ", але я хочу закрити свої термінали приємним способом, використовуючи вихід, а не вбиваючи вікно.

Відповіді:


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і він закриває поточний сеанс, якщо (і тільки якщо) він містить лише одну оболонку, яка не виконує жодних інших команд. Він перейде на інший сеанс, якщо це можливо. Я використовую bash shell, тому вам може знадобитися змінити його на те, що ви використовуєте.

ps: якщо це має значення, я зараз використовую tmux 1.9a.


29

Я додав це до свого ~/.tmux.conf:

set-option -g detach-on-destroy off

Коли я знищую останню оболонку в сеансі, вона переходить на інший активний сеанс. Щойно всі сеанси закриті, 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: ing на іншій машині, де у мене буде окремий сеанс tmux, щоб уникнути їх вкладення.
— Девід Холм

Ні, цей скрипт розпочне новий сеанс tmux щоразу, коли ви відкриєте новий термінал, а не приєднуйтесь до існуючого. Чи можете ви надати більше деталей, що ви маєте на увазі "всередині tmux"?
— cuonglm

1
Скажімо, у мене є сесії X і Y, де у Y відкритий лише один термінал. Я запускаю "вихід" в останньому терміналі Y, що призведе до припинення сеансу. У цьому випадку я хотів би tmux перейти на сеанс X замість завершення. Але я не хочу, щоб сеанс tmux приєднувався / створювався щоразу, коли я запускаю новий термінал.
— Девід Холм
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.