यदि सत्र मौजूद है, तो अनुलग्नक के साथ tmux कैसे शुरू करें


91

अगर मैं उपयोग करता हूं

tmux attach

मैं एक चालू सत्र में संलग्न हो सकता हूं लेकिन यदि कोई सत्र नहीं चल रहा है, तो मुझे केवल त्रुटि मिलती है

no sessions

अगर कोई नहीं चल रहा है तो मैं अपने आप नया सत्र कैसे शुरू कर सकता हूं? कुछ इस तरह

tmux attach-or-create-new-session

जवाबों:


51

इसका उत्तर बहुत सरल है। इसे अपनी ~/.tmux.confफ़ाइल में रखें:

# if run as "tmux attach", create a session if one does not already exist
new-session -n $HOST

यदि आप चलाते हैं tmux attachऔर एक सत्र है, तो यह उस सत्र से संलग्न होगा (चाहे वह पहले से संलग्न हो या नहीं)। यदि पहले से ही कोई सत्र नहीं है तो यह आपके लिए एक सृजन करेगा।


11
यह एक साफ-सुथरी चाल है, लेकिन एक चेतावनी है: यदि tmuxबिना तर्क के इसे लागू किया जाता है, तो यह एक नया सत्र बनाएगा और फिर जैसे ही यह लाइन आपके पास पहुंचेगी, दूसरा सत्र बनाएगा ~/.tmux.conf। आप पहले सत्र को tmux lsबनाने के बाद निष्पादित करके इस मुद्दे को देख सकते हैं । व्यवहार में, जब आप इसे अपनी फ़ाइल में रखते हैं, तो आप बिना किसी तर्क के कॉल नहीं कर सकते हैंtmux
ब्रूनो पोलाको

4
तो आपको alias tmux="tmux attach"इस समस्या को रोकने के लिए एक उपनाम जोड़ना होगा
रुबो77

@BrunoPolaco: एक अतिरिक्त खाली tmux सत्र के साथ हर समय चलने वाला बड़ा कैविटी क्या है (इसके अलावा यह कार्य-सूची में सुव्यवस्थित नहीं दिखता है)?
रूबों 77

@ rubo77 संसाधन। कुछ लोगों के पास कुछ डिफ़ॉल्ट उपकरण, खिड़कियां, पैन आदि होते हैं, जब वे लॉन्च करते हैं tmux
rovr138

129

यदि आपके सत्र का नामकरण ठीक है, तो यह new-sessionकमांड के साथ करना आसान है :

tmux new-session -A -s main

mainसत्र का नाम कहां है जो जरूरत पड़ने पर संलग्न या बनाया जाएगा।

से man tmux:

-Aझंडा बना देता है new-sessionकी तरह व्यवहार attach-sessionकरता है, तो सत्र-नाम पहले से मौजूद है; इस मामले में, -Dजैसा व्यवहार करता -dहै attach-session

कृपया ध्यान दें कि -Aविकल्प को 26 मार्च 2013 से tmux संस्करण1.8 में पेश किया गया है , पहले के संस्करणों के लिए, उपयोग करें tmux attach || tmux


10
+1 अंतर्निहित कार्यक्षमता का उपयोग करने और मैन डॉक्टर स्निपेट प्रदान करने के लिए
अरी पैट्रिक

1
मेरी उपनाम सूची में alias "tmux-attach-or-create-main-session=tmux new-session -A -s main":। पारितोषिक के लिए धन्यवाद! मैनुअल पेज: openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1
जेरोन Wiert Pluimers

tmux: unknown option -- Aयह केवल हाल के संस्करणों में उपलब्ध है।
xApple

यह वह विधि है जिसका मैंने उपयोग किया था, लेकिन अब आप "tmux detach" का उपयोग नहीं कर सकते। आपको मौजूदा सत्र को बचाने और बाहर निकलने के लिए शॉर्टकट <ctrl> b - d का उपयोग करना होगा।
जेस

2
[ -z "$TMUX" ] && exec tmux new -As .यह वह है जो मैं अपने में उपयोग करता हूं .bashrc
रायनस

30

यदि कोई त्रुटि देता है तो यह एक नया सत्र शुरू करेगा:

tmux attach || tmux new

इसलिए एक अन्य व्यक्ति काम करेगा:

tm="tmux attach || tmux new"

तुम भी बदलकर इसे कम कर सकते हैं tmux attachके लिएtmux a
ब्रूनो Polaco

जब यह कार्यशील होता है, तो वेस्ले बॉघ के समाधान में वही काम करने के लिए tmux की अंतर्निहित कार्यक्षमता का उपयोग होता है
अरी पैट्रिक

fwiw यह पुराने संस्करणों के लिए सबसे अच्छा उत्तर की तरह प्रतीत होता है, इससे पहले -ए को पेश किया गया था (उदाहरण v1.6)
क्रिस्टोफर पीटरसन

3

निम्नलिखित को अपने में जोड़ने पर विचार करें .bashrc

if [ -z "$TMUX" ]; then
    base_session='my_session'
    # Create a new session if it doesn't exist
    tmux has-session -t $base_session || tmux new-session -d -s $base_session
    # Are there any clients connected already?
    client_cnt=$(tmux list-clients | wc -l)
    if [ $client_cnt -ge 1 ]; then
        session_name=$base_session"-"$client_cnt
        tmux new-session -d -t $base_session -s $session_name
        tmux -2 attach-session -t $session_name \; set-option destroy-unattached
    else
        tmux -2 attach-session -t $base_session
    fi
fi

आप इसका उपयोग मेरे ZSH संसाधन फ़ाइल में मेरे github रेपो में देख सकते हैं


2

वेस्ली बेट के उत्तर पर विस्तार करने के लिए (जो मेरे लिए डबल-नेस्टिंग सत्र थे, जब लॉगिन में .bashrc का उपयोग किया जाता है) और थोड़ा सा लचीलापन जोड़ते हैं क्योंकि मैं अक्सर sudo -sसर्वरों पर उपयोग करता हूं (जो कि मेरे द्वारा .bashrc फिर से लोड और डबल नेस्ट होगा), यहाँ। मेरे पास मेरे .bashrc में क्या है:

if [ -z "$TMUX" ] && [ ${UID} != 0 ]
then
    tmux new-session -A -s main
fi

यह एक tmux सत्र के लिए जाँच करता है और सुनिश्चित करता है कि आप नया सत्र बनाने या उस मौजूदा नाम के साथ संलग्न करने से पहले सुपरयुसर नहीं हैं main


1

ड्रू फ्रैंक ने इसका जवाब यहां दिया: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r

इस स्क्रिप्ट को अब मैं इसके लिए उपयोग करता हूं (हालांकि, मैंने tmux के साथ एक और मुद्दे के कारण स्क्रीन पर वापस स्विच किया है) /somewhere/on/your/path/ttmuxया शेल फ़ंक्शन के रूप में:

#!/bin/sh
# many thanks to Drew Frank: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r
(tmux ls | grep -vq attached && tmux -2 at) || tmux -2

-2विकल्प 256 रंग टर्मिनल समर्थन मान tmux चुना है, ताकि उन अपनी स्थिति के लिए उपयुक्त नहीं हो सकता।



1

मैंने @SuperMagic के उत्तर में थोड़ा सुधार किया। मैंने इस ब्लॉक को अपने सबसे ऊपर रखा.zshrc

if [[ $TMUX = "" ]]; then
  # try to reattach sessions
  tmux ls | grep -vq attached && TMUXARG="attach-session -d"
  exec eval "tmux -2 $TMUXARG"
fi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.