कमांड पूरा होने पर फलक / विंडो को बंद करें - tmux


33

मेरी tmux.confफ़ाइल में मैंने इसे खुली हुई खिड़कियों, उन्हें नाम, सेटअप पैन आदि आदि के लिए कॉन्फ़िगर किया है।

हालाँकि मेरे पास एक मुद्दा यह है कि यदि पैन में से कोई एक कमांड लॉन्च करता है ls, तो हम कहते हैं , कि कमांड पूरा होने के बाद पैन अपने आप बंद हो जाता है (तुरन्त)। क्या इस व्यवहार को रोकने का कोई तरीका है? या यह एक कमांड पूरा होने के बाद एक सामान्य शेल में गिर गया है?

मैं यह मान रहा हूं कि फलक शुरू होने पर मुझे एक शेल -> कमांड निष्पादित करना होगा, लेकिन अगर मुझे पता चल सके तो मुझे बहुत नुकसान होगा। मैंने इस समस्या के लिए थोड़ा गुगली की है, लेकिन कम हुई है।

जवाबों:


22

आपके पास विकल्पों की एक जोड़ी है।

  1. lsअपनी विंडो में चलाने के बजाय , एक शेल चलाएं, फिर निष्पादित करने के लिए शेल कीस्ट्रोक्स भेजें:

    tmux start-server  
    tmux new-session -d -s session  
    tmux new-window -t session:1  
    tmux send-keys -t session:1 ls C-m
    
  2. आप इस तरह से आदेशों का एक क्रम दोपहर का भोजन कर सकते हैं जैसे अपने अन्य आदेशों के चलने के बाद खुद को बैश शेल के साथ छोड़ दें:

    tmux start-server  
    tmux new-session -d
    tmux new-window 'ls;bash -i'
    
  3. अपनी प्रक्रिया समाप्त होने के बाद पैन को जीवित रखने के विकल्प पर विवरण के लिए जसोनव्रीयन का उत्तर देखें remain-on-exitताकि आप आउटपुट की समीक्षा कर सकें।

  4. यदि कुछ कमांड का आउटपुट एक बार देखने लायक था, तो यह ताज़ा करने लायक हो सकता है। यदि आप किसी ऐसी चीज के आउटपुट की निगरानी कर रहे हैं जो आप watchसमय-समय पर नया आउटपुट प्राप्त कर सकते हैं । यह पैनके साथ अच्छी तरह से खेलना चाहिए tmux:

    tmux start-server  
    tmux new-session -d
    tmux new-window 'watch -n 60 ls'
    

धन्यवाद दोस्त! बहुत बढ़िया जवाब, नंबर 2 और नंबर 4 वही हैं जो मैं काम कर रहा था, लेकिन नंबर 1 एक बेहतरीन विकल्प के रूप में भी लगता है। सभी मदद के लिए धन्यवाद, यह वास्तव में सराहना की गई है (आप दोनों)।
स्टू

1
# 1 का लाभ यह है कि कमांड शेल इतिहास में रहता है और इसे आसानी से फिर से निष्पादित किया जा सकता है। यदि कमांड बड़ा और बदसूरत था, तो यह बहुत मददगार है।
गोएर्टज़िनेटर

1
यह मेरे लिए बिना start-serverकमांड के काम कर रहा है, मुझे लगता है कि जरूरत पड़ने पर यह अपने आप शुरू हो जाता है। क्या इसके बावजूद स्पष्ट रूप से कॉल करने का कोई फायदा है?
14

1
@ ल्युटर मुझे लगता है कि यदि कोई भी ऐसा नहीं पाया जाता है तो ऑटो-सर्वर शुरू कर देता है tmuxक्योंकि मैंने यह उत्तर लिख दिया है। यदि आपके संस्करण में सर्वर प्रक्रिया आवश्यक हो तो मुझे किसी भी लाभ का पता नहीं है।
कालेब

13

आप remain-on-exitविकल्प का उपयोग कर सकते हैं :

बाहर रहना-पर [बाहर | बंद]
इस ध्वज सेट के साथ एक विंडो तब नष्ट नहीं होती है जब उसमें चलने वाला प्रोग्राम बाहर निकल जाता है। विंडो को रिस्पॉन्स-विंडो कमांड के साथ पुन: सक्रिय किया जा सकता है।

श्वसन प्रक्रिया को सरल बनाने के लिए, आप इसे एक कुंजी से बांधना चाहते हैं:

bind-key R respawn-window

यह सुनिश्चित करेगा कि प्रोग्राम से बाहर निकलने पर आपको मृत खिड़कियों से नहीं छोड़ा जाएगा।


मैं वहाँ पहुँच रहा था! मैं समय से भाग गया और निर्णय लिया कि मुझे अपना उत्तर संपादित करना होगा। हां, यह तीसरा विकल्प है, मुख्य नुकसान यह है कि यह एक रीड ओनली विंडो को छोड़ देता है जिसे आप दोबारा बनाए बिना उपयोग नहीं कर सकते।
कालेब

अच्छी बात। मैंने एक (अर्ध) वर्कअराउंड के साथ अपडेट किया है।
जसोनव्रीयन

क्या यह पैन के साथ काम करता है?
आजमुक

1
इसे कमांड लाइन से सेट करनाtmux set-option remain-on-exit on
rmanna

1
@azmeukset-option -g remain-on-exit on bind-key r respawn-pane
HappyFace

1

यहाँ send-keys@Caleb द्वारा सुझाई गई विधि का उपयोग करके एक विस्तारित उदाहरण दिया गया है

#!/bin/sh
tmux start-server
tmux new-session -d -n 'mywindowname'
tmux send-keys -t mywindowname 'cd notes' Enter 'vim whiteboard/tasks.md' Enter
tmux new-window -d -n 'secondwindowname' # this -d prevents focus from changing to the new window
tmux -2 attach-session -d
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.