एक 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और यह वर्तमान सत्र से बाहर निकलता है यदि (और केवल यदि) तो यह केवल एक शेल रखता है जो कोई अन्य कमांड नहीं चला रहा है। यदि संभव हो तो यह दूसरे सत्र में बदल जाएगा। मैं बैश शेल का उपयोग करता हूं, इसलिए आपको इसे आपके द्वारा उपयोग की जा रही किसी चीज़ में बदलने की आवश्यकता हो सकती है।

ps: अगर यह मायने रखता है, तो मैं वर्तमान में tmux 1.9a का उपयोग कर रहा हूं।


29

मैंने इसे अपने साथ जोड़ा ~/.tmux.conf:

set-option -g detach-on-destroy off

जब मैं एक सत्र में अंतिम शेल को नष्ट करता हूं, तो यह दूसरे सक्रिय सत्र में बदल जाता है। एक बार सभी सत्र बंद हो जाते हैं, tmuxबाहर निकल जाते हैं।


4
सही उत्तर को इस पर अद्यतन किया जाना चाहिए
cviejo

कृपया प्रश्न के पोस्टर को याचिका दें।
रिचेन

यह ध्यान रखना महत्वपूर्ण है कि tmux उस सेटिंग को अपडेट नहीं करता है, जब मौजूदा सत्रों के लिए अलग और फिर से कोचिंग करता है। इसके प्रभाव के लिए आपको tmux सर्वर को पुनरारंभ करना होगा।
नी

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 सेशन करने की कोशिश करता हूं और फिर ssh: s एक और मशीन के लिए एक नया टर्मिनल खोलता हूं, जहां मुझे नेस्टेड होने से बचने के लिए एक अलग tmux सेशन होगा।
डेविड होल्म

नहीं, यह स्क्रिप्ट नया tmux सेशन शुरू करेगी जब भी आप एक नया टर्मिनल खोलेंगे, मौजूदा में संलग्न नहीं होंगे। क्या आप अधिक विवरण प्रदान कर सकते हैं, आपका क्या मतलब है "अंदर tmux"?
cuonglm

1
मान लीजिए कि मेरे पास सत्र X और Y है, जहां Y में केवल एक टर्मिनल खुला है। मैं वाई में अंतिम टर्मिनल में 'निकास' चलाता हूं जिससे सत्र समाप्त हो जाएगा। इस मामले में, मैं tmux को समाप्त करने के बजाय सत्र X पर स्विच करना चाहूंगा। जब भी मैं एक नया टर्मिनल लॉन्च करता हूं, मैं नहीं चाहता कि tmux सत्र संलग्न / निर्मित हो।
डेविड होल्म
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.