Tmux सेशन के अंदर से नया tmux सेशन बनाएं


105

मैं एक शेल स्क्रिप्ट लिख रहा हूं जो किसी दिए गए सत्र को बनाता / जोड़ता है या स्विच करता है, इस पर निर्भर करता है कि कोई tmux के अंदर है और सत्र मौजूद है।

मैं एक tmux सत्र के भीतर से एक नया tmux सत्र के निर्माण की आवश्यकता के मामले को छोड़कर सब कुछ बढ़िया काम कर रहा हूँ।

जब मेरी स्क्रिप्ट निष्पादित होती है tmux new-session -s name, तो मुझे निम्नलिखित आउटपुट मिलते हैं:

सत्रों को देखभाल के साथ नेस्टेड किया जाना चाहिए, $ TMUX को मजबूर करने के लिए

मैं वास्तव में सत्रों को घोंसला बनाना नहीं चाहता, मेरा लक्ष्य एक और अलग सत्र बनाना और tmux सत्र के भीतर से उस पर स्विच करना है

क्या यह संभव है?


2
उपयोगकर्ताओं को यह सवाल खोजने के लिए एक महान संसाधन: leanpub.com/the-tao-of-tmux/read
0xSheepdog

जवाबों:


142

सबसे तेज़ तरीका (मान लें कि आप ctrl-bअपने कमांड उपसर्ग के रूप में उपयोग करते हैं):

ctrl-b :new

फिर एक नया सत्र बनाने के लिए

ctrl-b s

सत्र का चयन करने के लिए और संलग्न करने के लिए।


5
समाधान के लिए +1 जो "सत्रों के बारे में परवाह नहीं करता है, उसे $ TMUX को बलपूर्वक परेशान किया जाना चाहिए"
Marcin Rogacki

3
और फिर आप अपने सत्र का नाम बदल सकते हैं:ctrl-b $
nha

21
और Ctrl-b :new -s <name>नए सत्र को एक नाम देना है।
ऐन तोवहरी

32

स्क्रिप्ट कैसे बनाई जाती है

यदि कोई सत्र मौजूद है, तो यह स्क्रिप्ट जाँच करेगी। यदि सत्र मौजूद नहीं है तो नया सत्र बनाएं और इसे संलग्न करें। यदि सत्र मौजूद है तो कुछ भी नहीं होता है और हम उस सत्र से जुड़ जाते हैं। परियोजना के नाम के साथ `~ / विकास 'को बदलने के लिए स्वतंत्र महसूस करें।

$ touch ~/development && chmod +x ~/development

# ~/development

tmux has-session -t development
if [ $? != 0 ]
then
  tmux new-session -s development
fi
tmux attach -t development  

टर्मिनल से नया सत्र

चलो दो अलग सत्र बनाते हैं, उन्हें सूचीबद्ध करते हैं, एक से जोड़ते हैं और फिर सत्र के माध्यम से tmux चक्र के भीतर से।

tmux new -s name -dtmux के अंदर से काम करता है क्योंकि हम एक नया अलग सत्र बना रहे हैं। अन्यथा आपको एक नेस्टिंग त्रुटि मिलेगी।

$ tmux new -s development -d
$ tmux new -s foo -d
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
$ tmux attach -t
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached)
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]

Tmux के भीतर से नया सत्र

अब हम अपने लक्ष्य सत्र से जुड़े हुए अंदर या बेहतर कहलाते हैं। यदि हम संलग्न करते हुए एक नया सत्र बनाने की कोशिश करते हैं तो यह एक नेस्टिंग त्रुटि का परिणाम होगा।

$ tmux new -s bar
> sessions should be nested with care, unset $TMUX to force

इसे हल करने के लिए हम एक नया अलग सत्र बनाते हैं। जैसे,

$ tmux new -s bar -d
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached)
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
> bar: 1 windows (created Wed Jan 13 17:19:35 2016) [204x54]

चक्र (स्विच) सत्र

  • Prefix ( पिछला सत्र
  • Prefix ) अगले सत्र

ध्यान दें: Prefix है Ctrl-bडिफ़ॉल्ट रूप से। आप बाध्य कर सकते हैं Prefixकरने के लिए Ctrl-aऔर मैक OSX में आप कैप्स ctrl को ताला बदल सकते हैंsystem preferences > keyboard > modifier keys

Tmux के अंदर रहते हुए कमांड मोड का उपयोग करते हुए एक सत्र में संलग्न करें

कोचिंग के बिना एक सत्र में संलग्न करने की कोशिश करने के परिणामस्वरूप त्रुटि होगी।

$ tmux attach -t development
> sessions should be nested with care, unset $TMUX to force

इसके बजाय कमांड मोड का उपयोग Prefix :करें attach -t session_nameऔर फिर एंटर टाइप करें।


बहुत ही पूर्ण उत्तर के लिए धन्यवाद, इसने मेरे सभी सवालों के जवाब एक साथ दिए!
mdekkers जू

24

मेरे लिए इस काम का उपयोग करना:

TMUX= tmux new-session -d -s name
tmux switch-client -t name

TMUX=पहली पंक्ति पर की आवश्यकता होती है तो tmux एक फेंक नहीं है sessions should be nested with care, unset $TMUX to forceसंदेश।


1
पहली पंक्ति को बदलने के बाद मेरी स्क्रिप्ट में महान काम करता है:TMUX=`tmux new-session -d -s name`
माइकल रॉबिन्सन

17

सभी आदेशों आप अपने टर्मिनल के भीतर शुरू कर सकते हैं, जैसे tmux new -s sessionNameभीतर से शुरू किया जा सकता tmux: ट्रिगर कुंजी (जैसे दबाकर ctrl-bतो) :प्रारंभ किए बिना आदेश तो tmuxहिस्सा।

नतीजतन, ctrl-b :इसके बाद new -s sessionNameआप जो चाहते हैं वही करेंगे और अपने सत्र को एक नाम देंगे। यह नए सत्र में स्वचालित रूप से स्विच हो जाता है।



7

user2354696 की सलाह पर मैं एक नया सत्र या "क्लोन" एक मौजूदा सत्र बनाने के लिए प्रमुख बाइंडिंग का उपयोग करता हूं

बाइंड-की N रन-शेल 'TMUX = tmux new-session -d \; स्विच-क्लाइंट -n '
बाइंड-की C रन-शेल 'TMUX = tmux new-session -t $ (tmux display-message -p #S) -s $ (tmux display-message -p # S-clone) -d \; स्विच-क्लाइंट -n \; प्रदर्शन-संदेश "सत्र #S क्लोन" "
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.