मैं tmux कमांड चलाकर वर्तमान tmux सेशन का नाम कैसे जान सकता हूँ


34

मैं एक स्क्रिप्ट लिख रहा हूं। मैं वास्तव में यह जानना चाहता हूं। मुझे उम्मीद है कि tmux निष्पादन योग्य मुझे यह बता सकते हैं।

मुझे लगता है

tmux rename <newname>

वर्तमान सत्र का नाम बदल सकता है। लेकिन मुझे खुद का नाम लाने की आज्ञा नहीं मिली।

जवाबों:


49

साथ tmux 1.2 (और बाद में), तो आप उपयोग कर सकते हैं -pका विकल्प display-messageउत्पादन के लिए एक संदेश stdout (एक संलग्न ग्राहक को प्रदर्शित करने के बजाय) के लिए:

tmux display-message -p '#S'

#Sसत्र नाम के रूप में स्वरूपित किया गया है ( status-leftमैन पेज में विकल्प का विवरण देखें )।


+1, मेरे उत्तर से बहुत बेहतर है।
chepner

मैं वास्तव में सराहना करता हूं कि आप बताते हैं कि इसके लिए tmux 1.2 की आवश्यकता है, जो कि ओपनएसयूएसई 11.3 ऑटो ऑनलाइन अपडेट के लिए बिल्कुल उपलब्ध संस्करण है।
जिम चेन चेन

1.8 tmux के साथ, यह संलग्न सत्र का नाम देता है तब भी जब मैं उस सत्र में काम नहीं कर रहा हूँ।
Mihai Danila

टिम पीपुल्स का जवाब नीचे tmux 1.8 के साथ काम करता है और बाद में, साथ ही उन बिंदुओं को संबोधित करता है जो वह उठाता है। यही बेहतर जवाब है।
अलेक्जेंड्रोस

8

मुझे आश्चर्य है कि, लगभग 5 वर्षों के बाद, किसी ने भी ध्यान नहीं दिया है कि इनमें से कोई भी उत्तर पर्याप्त नहीं है। जब तक दोनों ठीक काम करते हैं, जब तक कि वर्तमान TTY होस्ट पर केवल tmux सत्र से जुड़ा होता है, ये उत्तर दोनों गिर जाते हैं यदि:

  1. वर्तमान टर्मिनल सत्र tmux सत्र का हिस्सा नहीं है, या
  2. कई, संलग्न tmux सत्र हैं

पूर्व के मामले में, दोनों जवाब यहां संलग्न सत्र का नाम वापस देते हैं (इस बात की परवाह किए बिना कि क्या वर्तमान टेट उस सत्र द्वारा शासित है)। उत्तरार्द्ध मामले में, परिणाम संभावना अनिश्चित है या कई उत्तरों में परिणाम देगा।

उचित प्रश्न यह होना चाहिए, "tmux सेशन का नाम क्या है जिससे मेरा वर्तमान टर्मिनल सत्र संलग्न है?"

उस प्रश्न के उत्तर के लिए , निष्पादित करें:

for s in $(tmux list-sessions -F '#{session_name}'); do
    tmux list-panes -F '#{pane_tty} #{session_name}' -t "$s"
done | grep "$(tty)" | awk '{print $2}'

यह tmux सत्रों की संख्या (संलग्न या अन्यथा) की परवाह किए बिना काम करता है और इस बात की परवाह किए बिना कि वर्तमान टर्मिनल सत्र tmux सत्र का हिस्सा है या नहीं।


1
बहुत बढ़िया जवाब। अपने पैन को सूचीबद्ध करने के लिए प्रत्येक सत्र के नाम के माध्यम से लूप करने के बजाय, आप tmux list-panes -a -F '#{pane_tty} #{session_name}'प्रत्येक सत्र के पैन को सूचीबद्ध करने के लिए भी उपयोग कर सकते हैं । निश्चित नहीं है कि नया कैसा -aहै, इसलिए YMMV।
ब्रायन क्लाइन

स्वीकार किए गए उत्तर का उपयोग करने और यहां वर्णित मुद्दों के अनुसार विफल होने के बाद इस प्रश्न पर वापस आ गए। कृपया इसे बढ़ाएँ। यदि संभव हो तो स्वीकृत उत्तर को बदल दिया जाना चाहिए।
अलेक्जेंड्रोस

1
विधि 1 ठीक काम करता है अगर एक विशिष्ट डेस्कटॉप सेटअप के लिए TMUXचलने से पहले पर्यावरण चर की जाँच के साथ संयुक्त tmux display-message -p '#S'
ZeroPhase

8

विस्तारित / सुधारा टिम-लोगों के जवाब के अनुसार don_crissti की टिप्पणी पर ऐसा क्यों है grep -vकी उम्मीद के रूप में कार्य नहीं कर रहा?

टिम-पीपल के जवाब में "$ (ट्टी)" कमांड

| grep "$ (tty)" |

अपेक्षा के अनुरूप उस संदर्भ में काम नहीं करेंगे। यह एक स्ट्रिंग का मूल्यांकन करता है 'ट्टी नहीं'।

इसे एक चर के साथ बदलने से यह समस्या हल हो जाती है।

tty = $ (tty)

...

| grep "$ ट्टी" |

इसके अलावा, जब कोई tmux सत्र मौजूद नहीं होता है, तो मूल कोड का उत्पादन होगा

"कोई सर्वर नहीं चल रहा है / tmp / tmux-1000 / default" त्रुटि संदेश।

जोड़ें 2>/dev/nullऔर कोड त्रुटि संदेश को प्रिंट किए बिना चलेगा।

संशोधित कोड इस प्रकार है:

tty=$(tty)
for s in $(tmux list-sessions -F '#{session_name}' 2>/dev/null); do
    tmux list-panes -F '#{pane_tty} #{session_name}' -t "$s"
done | grep "$tty" | awk '{print $2}'

1
सुधार क्या है? यदि यह आवश्यक है तो आपको एक उत्तर के बजाय इसे एक संपादन के रूप में प्रस्तुत करने पर विचार करना चाहिए। इसे एक अच्छा उत्तर देने के लिए आपको शायद कुछ और वर्णनात्मक पाठों पर विचार करना चाहिए।
सेठ

1
@ सेठ, मैं टिप्पणी करना चाहता था, लेकिन अजीब तरह से ऐसा करने के लिए पर्याप्त क्रेडिट नहीं था।
उज्ज्वल पक्ष

आपको टिप्पणी करने के लिए 50 प्रतिष्ठा की आवश्यकता है । यह आमतौर पर जटिल कोड के साथ टिप्पणी करने के लिए एक अच्छा विचार नहीं है क्योंकि आपके पास लाइन ब्रेक और इतने पर कमी है। आपके संपादन ने इसे बहुत अच्छा उत्तर दिया IMHO।
सेठ

ओह, अब मुझे समझ में आ गया। "ट्टी" मुद्दा एक बकवास बात है। मैं उस खिलौने के गोले का उपयोग नहीं करता: D
टिम पीपुल्स

1
@TimPeoples जबकि यह एक Bash समस्या हो सकती है। बैश अभी भी आधुनिक टर्मिनलों पर संगतता के लिए शेल स्क्रिप्ट को कोड करने का मानक है। निश्चित, पॉज़िक्स मानक आदर्श है; लेकिन, बैश में कुछ विशेषताएं हैं जो सभी अधिक उन्नत टर्मिनलों का हिस्सा हैं। बैश मारकर अन्य प्रमुख टर्मिनलों में से अधिकांश को बस काम करना चाहिए। मैं सिर्फ शेल चेक चलाता हूं और खराब त्रुटियों और स्वरूपण मुद्दों का एक गुच्छा पकड़ता हूं। (वर्तमान अधिक वर्णनात्मक वाक्यविन्यास के स्थान पर पुराने वाक्यविन्यास का उपयोग करते हुए)
ZeroPhase

4
  • क्रिस जॉन्सन का जवाब एक सत्र का नाम देता है, जब एक के बाहर से क्वेरी की जाती है।
  • उज्ज्वल पक्ष और टिम पीपुल्स का जवाब है tty

इसके बजाय, मैंने पाया कि यह मेरे लिए सही काम करता है:

if [[ -n "$TMUX_PANE" ]]; then
    session_name=$(tmux list-panes -t "$TMUX_PANE" -F '#S' | head -n1)
fi

3

आदर्श नहीं है, लेकिन आप इसके साथ संलग्न सत्र का नाम निकाल सकते हैं awk:

tmux list-sessions -F '#{session_name} #{session_attached,yes,}' | awk '$2=="yes" {print $1}'

कस्टम प्रारूप डिफ़ॉल्ट की तुलना में पार्स करना थोड़ा आसान है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.