रनिंग tmux सेशन में tmux pane को कमांड भेजें या भेजें


60

मैं एक शेल स्क्रिप्ट लिखना चाहता हूं जो एक नामित tmux सत्र से जुड़ी होगी, उस सत्र में एक विंडो (या फलक) चुनें और उस चयनित विंडो (या फलक) में एक कमांड चलाएं।

मैं इसे बैश स्क्रिप्ट से कैसे करूं?

मुझे पता है

tmux new-window -n:mywindow 'exec something'

मुझे नए सिरे से बनाई गई विंडो पर कमांड भेजने की अनुमति देता है, लेकिन मुझे कुछ ऐसा चाहिए

tmux select-window -t:0 'my command'

मुझे लगता है कि मैं उपयोग कर सकता था, send-keysलेकिन ऐसा लगता है कि कुछ ऐसा होना चाहिए जो कमांड या कमांड की सूची लेता है जो चलता है।

जवाबों:


82

प्रत्येक tmux pane एकल pty (छद्म tty) के लिए एक अंतरफलक है। गैर-विभाजित खिड़कियों में एक एकल फलक है; स्प्लिट विंडो में कई पैन हैं।

tmux एक प्रक्रिया के लिए अतिरिक्त प्रक्रियाओं को जोड़ने के लिए एक तरह से आपूर्ति नहीं करता है एक बार इसकी प्रारंभिक कमांड के साथ शुरू किया गया है। यह उस टर्मिनल के लिए नौकरी नियंत्रण 1 की आपूर्ति करने के लिए प्रारंभिक कमांड की प्रक्रिया (आमतौर पर एक शेल) पर निर्भर है ।

यदि आप फलक में वर्तमान में जो कुछ भी चल रहा है, उसे बंद करना चाहते हैं, तो आप respawn-pane -kमौजूदा कमांड को मारने के लिए उपयोग कर सकते हैं और इसे एक नए (जैसे respawn-pane -t sessionname:0.4 -k 'some -new command') के साथ बदल सकते हैं ।

लेकिन, यदि आप वर्तमान में जो कुछ भी चल रहा है, उसे बनाए रखना चाहते हैं, तो इससे बेहतर कोई विकल्प नहीं हो सकता है send-keys

आप इसे इस तरह से स्क्रिप्ट कर सकते हैं (अंतिम संलग्न करें, क्योंकि अन्यथा स्क्रिप्ट बस जारी होने से पहले आपको अलग होने का इंतजार करेगी)

session=whatever
window=${session}:0
pane=${window}.4
tmux send-keys -t "$pane" C-z 'some -new command' Enter
tmux select-pane -t "$pane"
tmux select-window -t "$window"
tmux attach-session -t "$session"

ध्यान दें कि, send-keysकमांड पर, आपको वास्तव में पत्र लिखना चाहिए E n t e r, tmuxविंडो में एक नई पंक्ति भेजने के लिए बताने के लिए। (स्वाभाविक रूप से, हर कमांड Enterकुंजी के साथ समाप्त होता है ।)


1 नौकरी नियंत्रण एकल सत्र के कई प्रक्रिया समूहों के बीच मध्यस्थता है जो ट्टी को अपने नियंत्रण टर्मिनल के रूप में उपयोग करता है। यानी, Ctrl+ Zकुंजी स्थगित करता है, और jobs, fgऔर bgखोल आदेशों।


2
इसके लिए धन्यवाद! मैंने #{session_name}:#{window_index}.#{pane_index}अपनी स्टेटस लाइन में लगा दिया ताकि मैं जल्दी से देख सकूँ कि किस पेन को कमांड भेजनी है।
एक भुगतान किया बेवकूफ

11

आप उपयोग कर सकते हैं C-mके बजाय Enter। एक ही बात है। इसके अलावा, tmuxका उपयोग करके -t rightया दाएं / बाएं फलक पर भेजना आसान बनाता है -t left। और यदि आप किसी अन्य विंडो में एक फलक को संबोधित करना चाहते हैं, तो बस इसे विंडो नंबर और अवधि के साथ उपसर्ग करें, जैसे -t 0.right

अब आप तर्क के रूप में कुंजियों के अनुक्रम को प्राप्त करने के लिए एक साधारण बैश फ़ंक्शन लिख सकते हैं और इसे लक्ष्य फलक पर आसानी से भेज सकते हैं।

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