दूसरे tmux सेशन के अंदर tmux सेशन खोलने पर कमांड कैसे भेजें?


136

एक विशिष्ट स्थिति हो सकती है:

$ tmux
  [0] $ ssh example.com
      $ tmux attach
        [0] $ 

मैं एक tmux सेशन खोलता हूँ, फिर एक सर्वर में ssh और एक मौजूदा tmux सेशन से जुड़ता हूँ। इस बिंदु पर मेरा एक tmux सत्र दूसरे के अंदर है। मैं आंतरिक tmux सत्र में कमांड कैसे भेजूँ?

नोट: दोनों tmux सत्र में एक ही कुंजी बाइंडिंग है।


4
प्रोग्रामिंग सवाल नहीं। कृपया superuser.com का प्रयास करें । सौभाग्य।
शेल्टर

1
मुझे प्रश्न को स्थानांतरित करने के लिए कहने में खुशी हो रही है, हालांकि संदर्भ के लिए मैं tmux से कोड के अंदर विम का उपयोग करता हूं और निश्चित रूप से अक्सर अन्य सर्वर पर ssh करना पड़ता है, जहां यह समस्या होती है।
कृष

जवाबों:


207

send-prefixआदेश अपने उपसर्ग कीस्ट्रोक को (प्रक्रिया में चल रहे) सक्रिय फलक भेजने के लिए इस्तेमाल किया जा सकता। डिफ़ॉल्ट रूप से, उपसर्ग Cb और Cb होता है send-prefix(ताकि इसे दो बार मारने से सक्रिय Cb पर एकल Cb भेजा जा सके)। यह वही है जो हमें आंतरिक tmux उदाहरण के बाइंडिंग तक पहुंचने की आवश्यकता है ।

पहले Cb को "बाहरी" tmux उदाहरण द्वारा इसके उपसर्ग कुंजी के रूप में कैप्चर किया जाता है। दूसरा एक "बाहरी" tmux उदाहरण द्वारा कब्जा कर लिया है और इसके Cb बाइंडिंग ( send-prefix) को चालू करता है । यह बाहरी उदाहरण के सक्रिय फलक पर Cb भेजता है । इस फलक में चलने वाली प्रक्रिया (अंततः, एक ssh उदाहरण के माध्यम से ) "आंतरिक" tmux उदाहरण है। यह Cb को अपनी उपसर्ग कुंजी के रूप में कैप्चर करता है । अब आपका अगला कीस्ट्रोके बाहरी tmux उदाहरण के माध्यम से पारित हो जाएगा और एक बंधन को ट्रिगर करने के लिए आंतरिक द्वारा कब्जा कर लिया गया है।

Tmux के दूसरे-स्तरीय उदाहरण में c बाइंडिंग ( new-window) को ट्रिगर करने के लिए , आप Cb Cb c टाइप करेंगे । Tmux के तीसरे स्तर के उदाहरण के लिए आप Cb Cb Cb Cb c टाइप करेंगे ।

यदि आप आमतौर पर tmux की कई परतों के साथ काम कर रहे हैं तो प्रत्येक स्तर के लिए यह दोहरीकरण कष्टप्रद हो सकता है । यदि आप कुछ अन्य कुंजी को छोड़ सकते हैं, तो आप चीजों को बनाने के लिए एक गैर-उपसर्गित बंधन बना सकते हैं (संभवतः) टाइप करना आसान है:

bind-key -n C-\ send-prefix
bind-key -n C-^ send-prefix \; send-prefix

दूसरे स्तर के tmux में नई विंडो बनाएँ : C- \ c
तीसरे स्तर के tmux में नई विंडो बनाएँ : C- ^ c (या C- \ C- \ c )


यदि आपके पास सीमित संख्या में tmux कमांड्स हैं, जिन्हें आप (आसानी से) निचले स्तर के tmux इंस्टेंस पर भेजना चाहते हैं , तो आप इसके बजाय send-keysकुछ विशिष्ट बाइंडिंग बनाने के लिए उपयोग कर सकते हैं (संभवतः आपके शीर्ष-स्तरीय tmux इंस्टेंस में):

bind-key C-c  send-keys C-b c
bind-key C    send-keys C-b C-b c

दूसरे स्तर के tmux में नई विंडो बनाएँ : Cb Cc
तीसरे स्तर के tmux में नई विंडो बनाएँ : Cb C


इसके अतिरिक्त मुझे अपनी मौजूदा last-windowबाइंडिंग पर टिप्पणी करनी थी क्योंकि ऐसा करते समय उसे बुलाया गया था C-a C-a, जैसे #bind-key C-a last-window:। ध्यान दें मेरा उपसर्ग aडिफ़ॉल्ट नहीं है b
क्रिश

1
bind-key -n C-\ send-prefixकाम नहीं करता। मेरा tmux \ _ को पहचान नहीं रहा है। जब मैं एक पत्र का उपयोग करता हूं, तो यह काम करता है।
अंधेरे में

@Darksky: किस संस्करण tmux प्रयोग कर रहे हैं? यह मेरे लिए 1.7, 1.6 और 1.5 के साथ काम करता है। यदि आप एक शेल कमांड (यानी tmux bind-key -n 'C-\' send-prefix) से बाध्यकारी बना रहे हैं, तो आपको निश्चित रूप से एक अतिरिक्त स्तर जोड़ने की आवश्यकता होगी ; यदि आपको ~/.tmux.conf(या उपसर्ग :कमांड लाइन से) काम करने में समस्या हो रही है , तो आप इसी तरह के उद्धरण (यानी bind-key -n 'C-\' send-prefix) की कोशिश कर सकते हैं ।
क्रिस जॉन्सन

51

भीतर तक पहुँचने के लिए, नियंत्रण रखें और B को दो बार मारें।


7

संपादित करें:

मैं इसे बाइंड-की के रूप में उपयोग करने की सलाह नहीं देताC-q , क्योंकि यह एक डिफ़ॉल्ट नियंत्रण-कुंजी है

स्क्रीन को अन-फ़्रीज़ करता है और स्क्रीन डिस्प्ले को जारी रखता है

एक स्थिति यहां होती है , और @Paschalis एक समाधान प्रदान करता है:

यदि यह दो बार अशुभ होता है (उपसर्ग के रूप में Cq के साथ एक दूरस्थ tmux सत्र): टाइप करें Cltr-q, तब :, और tux में दर्ज करें:send-keys C-q

नीचे इसका उत्तर है:


इसे सरल बनाने के लिए, नीचे दी गई लाइन को अपने में जोड़ें ~/.tmux.conf

bind-key -n C-q send-prefix

तब आप सीधेC-q अपने दूरस्थ tmux के लिए बाइंड-की के रूप में उपयोग कर सकते हैं


अगर किसी ने बाहरी tmux में डिफ़ॉल्ट बाइंडर कुंजी को बदल दिया है, तो उपरोक्त स्निपेट को काम करने के लिए इनर tmux में उसी डिफ़ॉल्ट बाइंडर कुंजी का उपयोग करना होगा!
पसलीस

मैं अपने स्थानीय tmux (Ctrl + को मेरे मामले में) के उपसर्ग को संशोधित कर रहा हूं, इसलिए सर्वर पर सभी "इनर" tmux-es में उपसर्ग के लिए डिफ़ॉल्ट बाइंडिंग है
कार्रवाई-रहित
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.