Khi thoát khỏi thiết bị đầu cuối cuối cùng trong phiên tmux, nó có thể chuyển sang thiết bị khác không?


12

Khi tôi thoát thiết bị đầu cuối cuối cùng trong phiên tmux, nó sẽ tự động đóng tmux và đưa tôi trở lại thiết bị đầu cuối cha mẹ. Thay vào đó, có thể chuyển tmux sang phiên khác, đã chạy, thay vì đóng không?

Tôi tạo một phiên có tên mới cho mọi tác vụ mà tôi làm việc, chẳng hạn như TRxxx, email, cào, v.v. và khi tôi hoàn thành một trong số đó, tôi đóng tất cả các thiết bị đầu cuối bằng cách chạy thoát trong mỗi một. Khi bạn chạy thoát trong thiết bị đầu cuối cuối cùng của phiên, tmux sẽ đưa bạn trở lại thiết bị đầu cuối mẹ nhưng có thể chuyển nó sang một trong các phiên mở khác để tôi không phải gắn lại?

Câu hỏi này tương tự như " Giết một phiên tmux và chọn một phiên tmux khác " nhưng tôi muốn đóng các thiết bị đầu cuối của mình theo cách tốt đẹp bằng cách sử dụng lối ra thay vì giết cửa sổ.

Câu trả lời:


2

Gần nhất tôi nhận được là một chức năng tmux tôi đã viết. Tôi thường thoát khỏi shell bằng cách nhấn Ctrl+ D, vì vậy tôi đã lập trình tmuxđể thoát và chuyển phiên khi nhấn [PREFIX] Ctrl+ D. Đặt những điều sau vào .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;                                                     \
    "

Nhấn [PREFIX] Ctrl+ Dvà nó thoát khỏi phiên hiện tại nếu (và chỉ khi) nó chỉ giữ một shell không chạy bất kỳ lệnh nào khác. Nó sẽ chuyển sang phiên khác nếu có thể. Tôi sử dụng bash shell, vì vậy bạn có thể cần phải thay đổi nó thành một cái gì đó bạn đang sử dụng.

ps: trong trường hợp có vấn đề, tôi hiện đang sử dụng tmux 1.9a.


27

Tôi đã thêm cái này vào ~/.tmux.conf:

set-option -g detach-on-destroy off

Khi tôi phá hủy lớp vỏ cuối cùng trong một phiên, nó sẽ chuyển sang một phiên hoạt động khác. Khi tất cả các phiên được đóng lại, tmuxthoát.


3
câu trả lời đúng nên được cập nhật vào đây
cviejo

Hãy kiến ​​nghị các poster của câu hỏi.
RichN

Điều quan trọng cần lưu ý là tmux không cập nhật cài đặt đó khi tách và gắn lại vào các phiên hiện có. Bạn cần khởi động lại máy chủ tmux để nó có hiệu lực.
nyi

2

Thêm những dòng này vào .bashrcvà thử:

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
Đó gần như là những gì tôi muốn nhưng có thể thay đổi nó để nó chỉ chạy nếu tôi thoát khỏi bên trong tmux? Kịch bản này sẽ đính kèm vào các phiên tmux hiện có bất cứ khi nào tôi mở một thiết bị đầu cuối mới. Tôi cố gắng có một phiên tmux cho các công cụ cục bộ và sau đó tôi mở một thiết bị đầu cuối mới khi ssh: ing đến một máy khác, nơi tôi sẽ có một phiên tmux riêng để tránh việc chúng được lồng vào nhau.
David Holm

Không, tập lệnh này sẽ bắt đầu phiên tmux mới bất cứ khi nào bạn mở một thiết bị đầu cuối mới, không gắn với hiện có. Bạn có thể cung cấp thêm chi tiết, ý bạn là gì "bên trong tmux"?
cuonglm

1
Giả sử tôi có phiên X và Y, trong đó Y chỉ có một thiết bị đầu cuối mở. Tôi chạy 'exit' trong terminal cuối cùng trong Y, điều này sẽ khiến phiên kết thúc. Trong trường hợp này, tôi muốn tmux chuyển sang phiên X thay vì chấm dứt. Nhưng tôi không muốn một phiên tmux được đính kèm / tạo bất cứ khi nào tôi khởi chạy một thiết bị đầu cuối mới.
David Holm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.