मैं मैन्युअल रूप से उन्हें दर्ज किए बिना पैन के सेट को खोलने के लिए tmux कैसे प्राप्त करूं?


30

इसलिए, मैं एक परियोजना-विशिष्ट tmuxसत्र बनाना चाहता हूं, जो कुछ पैन में कुछ आदेशों को स्वचालित रूप से पॉप अप करता है। एक ऑनलाइन ट्यूटोरियल और tmuxमैन पेज के बाद, यह वह है जो मैं एक कॉन्फ़िगरेशन फ़ाइल के लिए आता हूं:

new -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls

परिणाम है ... कुछ भी नहीं। tmuxउस विंडो में सिंगल विंडो और सिंगल पेन से शुरू होता है, जिसमें कोई कमांड निष्पादित नहीं होती है।

मैं एक कॉन्फ़िगरेशन फ़ाइल बनाने के बारे में कैसे जाऊँगा जो वास्तव में मुझे कुछ पूर्व आदेशों के साथ विंडोज़ और पैन का एक सेट बनाने की अनुमति देता है?

जवाबों:


36

आपकी कॉन्फ़िगरेशन फ़ाइल काम कर रही है, लेकिन कुछ जटिलताएँ हैं।

अल्पकालिक कमांड

सबसे पहले, जो कमांड आप शुरू कर रहे हैं ( एलएस के उदाहरण ) बहुत जल्दी खत्म हो रहे हैं। आदेशों के लिए विंडो और पैन बनाए जाते हैं, लेकिन प्रत्येक कमांड से बाहर निकलते ही वे गायब हो जाते हैं।

यदि आपका लक्ष्य वास्तव में आपके अंतिम कॉन्फ़िगरेशन में ऐसे "एक शॉट" कमांड का उपयोग करना है, तो आपको remain-on-exitसंभवतः विंडो विकल्प का उपयोग करना चाहिए (और संभवतः सत्र set-remain-on-exitमें बनाए गए सभी विंडो के लिए डिफ़ॉल्ट प्रदान करने के लिए सत्र विकल्प )। जब remain-on-exitएक विंडो के लिए सेट किया जाता है, तो कमांड से बाहर निकलने पर यह गायब नहीं होगा। आप शायद respawn-windowएक कुंजी को मैप करना चाहते हैं (ध्यान दें: respawn-windowमूल कमांड का जवाब देंगे; व्यक्तिगत पैन का जवाब देने के लिए tmux 1.5 respawn-paneमें भी उपलब्ध है )।

bind-key R respawn-window

# set global r-o-e so that initial window of initial session gets it
set -g set-remain-on-exit on

# create a session and its windows/panes
new -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls

# restore global r-o-e
set -g set-remain-on-exit off

# let session r-o-e inherit from global value for future windows
set -u set-remain-on-exit

या, यदि आप अपनी प्रारंभिक विंडो को नंबर 0 के बजाय नंबर 1 नहीं मानते हैं, तो हम वैश्विक मूल्य को बदलने से बच सकते हैं:

bind-key R respawn-window

# create a session with a throw-away window
new true

# for future windows, stay open after the command exits
set set-remain-on-exit on

# create the windows we really want
neww -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls

# for future windows, revert r-o-e to global value
set -u set-remain-on-exit

यदि आप केवल lsएक सरलीकृत प्लेसहोल्डर कमांड के रूप में उपयोग कर रहे थे और आप वास्तव में अपने विंडोज़ / पैन में किसी प्रकार के इंटरैक्टिव कमांड को स्पॉन करने का इरादा रखते हैं, तो आपको संभवतः केवल उस कमांड को स्पॉन करना चाहिए जिसे आप अंततः चलाने के लिए चाहते थे। अपने इच्छित आदेश बहुत समय लगता है, तो के दौरान इसका इस्तेमाल करने की शुरूआत करने के लिए tmux परीक्षण, तो एक खोल या अन्य सरल इंटरैक्टिव कमांड (उदाहरण के लिए स्थानापन्न top, sqlite3, आदि)।

new-session डिफ़ॉल्ट कमांड है

दूसरा, कमांड कमांड (जैसे ) के बिना tmux चलाना कमांड tmuxका उपयोग करने के बराबर है new-session(यानी tmuxजैसा है tmux new-session)। आपकी .tmux.confविंडो (पैन के newलिए एक उपनाम new-session) के लिए एक सत्र बनाता है और एक कमांड तर्क के बिना tmuxnew-session शुरू करके निर्दिष्ट अंतर्निहित कमांड के लिए एक और सत्र बनाया जा रहा है। यदि आप डिफ़ॉल्ट स्टेटस बार का उपयोग कर रहे हैं, तो आप "अतिरिक्त" सत्र ( नंबर 0 में बनाया गया प्रारंभिक सत्र ) में स्थिति पट्टी के बाईं ओर एक देखेंगे ।[1].tmux.conf

यदि आप अतिरिक्त सत्र बनाने से बचना चाहते हैं, तो tmux attachसादे के बजाय उपयोग करें tmux। आपके आदेश से आदेश .tmux.confचलेंगे, सत्र 0 का निर्माण होगा, और फिर आपका ग्राहक एक नया बनाने के बजाय उस सत्र से जुड़ जाएगा।


2
ठीक है, मैं शायद व्हेल सैंडविच के रूप में यहाँ उतना ही मोटा हो रहा हूँ, लेकिन अभी मुझे एक कॉन्फ़िगरेशन फ़ाइल मिली है जो केवल splitwइसमें है - और कुछ नहीं - और मुझे अभी भी स्प्लिट स्क्रीन नहीं मिल रही है क्योंकि यह कहता है वर्तमान सत्र स्थापित नहीं कर सकता। अगर मैं newइससे पहले जोड़ता हूं , मुझे मिलता है ... एक खिड़की, एक फलक। मुझे नहीं लग रहा है, मेरे जीवन के लिए स्टार्ट-अप में दो पैन मिलेंगे।
मेरे सही ऑपिनियन

1
जब मैं tmux के माध्यम से शुरू करता हूं new, तब एक विन्यास फाइल मेरे साथ splitwकाम करती है । याद रखने वाली एक बात यह है कि (या विकल्प के साथ निर्दिष्ट फ़ाइल ) का उपयोग केवल तभी किया जाता है जब कोई सर्वर पहले से चल रहा हो। जांचें कि क्या सर्वर के माध्यम से चल रहा है । यदि आप किसी सर्वर के पहले से चल रहे फ़ाइल से कमांड चलाना चाहते हैं, तो इसे इस तरह से करें: (यदि आप इसे चलाते हैं जब कोई सर्वर नहीं है (या फ़ाइल) पहले चलेगी तो आपकी फ़ाइल)। tmux attach.tmux.conf-ftmux lstmux source-file /path/to/conf-file-that-creates-a-session-and-windows \; attach.tmux.conf-fsource-file
क्रिस जॉन्सन

कॉन्फ़िगर फ़ाइल को -f के साथ निर्दिष्ट किया जा रहा है - इसलिए मैं जा रहा हूं tmux new -f myconfig। उस कॉन्फिग फ़ाइल की सामग्री में केवल new उसके बाद शामिल है splitw। कमांड लाइन आज़माने से पहले मैं किसी भी और सभी tmux प्रक्रियाओं को मार रहा हूं tmux -f myconfig। मुझे दो पैन नहीं मिलते हैं। मैं वास्तव में यहाँ एक नुकसान पर हूँ कि इस बिंदु को क्या करना है (एक तरफ सिर्फ tmux को देने से अलग)।
मेरा सही ओपिनियन

4
@ जस्ट: आप बिना कमांड के तर्क का उपयोग करते हैं -fया नहीं, (जो कि नए सर्वर के लिए, आपकी कॉन्फिगर फाइल जो भी करता है, उसके शीर्ष पर एक नया सत्र बनाएगा)। आपकी प्री-स्प्लिट विंडो सत्र 0 में बनाई गई है, लेकिन अंतर्निहित कमांड एक अतिरिक्त सत्र (सत्र 1) बना रहा है (और अपनी स्थिति लाइन में देखें)। नया सत्र बनाने से बचने के लिए उपयोग करें जो आपकी पूर्व-विभाजित विंडो को छिपा रहा है। tmuxtmux new-sessionnew-session[1]tmux -f myconfig attach
क्रिस जॉन्सन

1
ठीक है, मुझे लगता है कि पढ़ना सीखना अंततः मेरे लिए भुगतान करना होगा। :) प्रयास और उत्तर के लिए धन्यवाद। अब सब कुछ ठीक है। काश यहाँ "टिपिंग जार" की प्रतिष्ठा होती, तो मैं आपको एक स्वीकृत उत्तर से अधिक दे सकता था।
JUST MY सही ओपिनियन

9

मुझे यकीन नहीं है कि मैं समझता हूं कि "मैन्युअल रूप से प्रवेश करने" से आपका क्या मतलब है, लेकिन यह है कि मैं इसे कैसे करता हूं। मैंने एक "ऑटोस्टार्ट" स्क्रिप्ट लिखी थी जिसे मेरे विंडो मैनेजर ने लॉन्च किया था। इसमें शामिल है:

tmux start-server                                                                                                                                                                                                                                                                                                                                                            
for i in ~/sessions_tmux/*.session; do "$i"; done

जहाँ प्रत्येक .session फ़ाइल कुछ इस तरह दिखाई देती है:

#!/bin/bash

SESSION_NAME="flaskr_tutorial"
if [[ ! -z "$TMUX" ]] || [[ ! -z "$TMUX_PANE" ]]; then
    echo "Already inside a tmux session, do not know what to do"
    exit 1
fi
tmux -q has-session -t "$SESSION_NAME"
if [ $? ]; then
    exit 0
fi
NEWCWD=~/projects/flaskr/
( cd "${NEWCWD}"; tmux new-session -d -s "$SESSION_NAME" )
tmux send-keys -t "$SESSION_NAME" 'vim flaskr.py' Enter
( cd "${NEWCWD}"; tmux split -h -t "$SESSION_NAME" )
tmux send-keys -t "$SESSION_NAME" 'sudo tail -F -n 100 /var/log/messages | ccze' Enter

रुको, वहाँ अधिक है! मेरे पास कभी-कभी बढ़ती फ़ाइलों की संख्या है जो मैं कोनोलाज़ के साथ लोड करता हूं:

konsole --background-mode --profile Shell --tabs-from-file ~/sessions_tmux/work_console.tabs

जहाँ work_console.tabs कुछ इस तरह दिखता है:

.
.
.
title: projectx;;    command: tmux attach -t projectx
title: flaskr;;      command: tmux attach -t flaskr_tutorial
.
.
.

फिर मैं konsole लॉन्च करने के लिए F12 दबाता हूं।


konsole टूटने लगता है इसलिए मैंने टर्मिनल पर स्विच किया है , जो अच्छी तरह से काम करता है। मेरे पास tmux-users मेलिंग सूची पर अधिक विस्तृत पोस्ट है
जॉन शमित

1
बस एक छोटी सी टिप्पणी, आप बदल सकते हैं '! -z 'अपने परीक्षणों में' -n 'के साथ;)
लिलोरॉक्स

6

मान लीजिए कि आप 3 सर्वर मॉनिटरिंग कार्य (यहां पिंगहोस्टहोस्ट) लॉन्च करना चाहते हैं, तो कॉन्फ़िगरेशन फ़ाइलों और सहेजे गए सत्रों के साथ गड़बड़ करने की कोई आवश्यकता नहीं है। यह सब कमांड-लाइन से किया जा सकता है।

tmux new-session 'ping  127.0.0.1' \; \
    split-window 'ping  127.0.0.1' \; \
    split-window 'ping  127.0.0.1' \; \
    select-layout even-vertical

सादगी के लिए धन्यवाद - बिल्कुल वही उदाहरण जिसकी मुझे तलाश थी!
dsz

5

मैंने टीमोकिल को tmux windows / session को ऑटोमेट करने के लिए बहुत उपयोगी पाया ।

रूबी में लिखा है, इसलिए आपको यह स्थापित करने की आवश्यकता है।

यहाँ एक नमूना विन्यास है:

session:
  name: 'my project'
  windows:
    -name: vim
     root: '~/code/my_project'
     splits:
       - cmd: vim
       - cmd: guard

आपके पास खिड़कियों और विभाजन की व्यवस्था हो सकती है।


4

Teamcoil लिए एक अन्य विकल्प के लिए समान है tmuxinator , यह सक्रिय विकास पर है और काफी अच्छी तरह से काम करता है। यह भी अद्भुत tmux पर (और तरह की समीक्षा) की सिफारिश की है : द प्रोगैमिक बुकशेल्फ से उत्पादक माउस-मुक्त विकास


टीमकोइल की तुलना में यह थोड़ा साफ था (लेकिन फिर भी इसके समान ही) और अभी इसका उपयोग कर रहा हूं। मैं बहुत खुश हूँ कि यह कैसे काम करता है!
अक्ताउ

4

**

  • बेहतर अपने सत्र को बचाओ!

** मैंने पाया कि अपने जैसे आलसी प्रशासक के लिए, मैं पूरी तरह से इसे बनाने की कोशिश में घंटों बिताने के बजाय, tmux के सत्र को बचाऊंगा। मैं 30 से अधिक सर्वरों का संचालन कर रहा हूं, और मेरे tmux सत्र गतिशील हैं, हर समय कॉन्फ़िगरेशन बदल रहा है। यह गर्दन में दर्द था, जब तक मैंने हाल ही में tmux-resurrect को खोजा, यह प्लगइन अभी बहुत अच्छा है। कोशिश तो करो। वर्तमान में, Ubuntu रिपॉजिटरी में tmux 1.8 है, इस प्लगइन को 1.9 की आवश्यकता है, इसलिए आपको मैन्युअल रूप से अपग्रेड करना होगा

sudo apt-get install python-software-properties software-properties-common
sudo add-apt-repository ppa:pi-rho/dev
sudo apt-get update
sudo apt-get install  tmux=2.0-1~ppa1~t

जिसके बाद आप इसे इनस्टॉल कर सकते है

git clone https://github.com/tmux-plugins/tmux-resurrect ~/clone/path

फिर इस लाइन को ~ / .tmux.conf के तल पर dd करें (यदि ~ / .tmux.conf उपलब्ध नहीं है, तो एक खाली फ़ाइल बनाएं)

run-shell ~/clone/path/resurrect.tmux

मैं इस लाइन को ~ / .tmux.conf के अंत में भी जोड़ता हूं ताकि प्लगइन सभी प्रोग्रामों के लिए सत्र बचाता है।

set -g @resurrect-processes ':all:'

फिर tmux पर्यावरण पुनः लोड करें।

tmux source-file ~/.tmux.conf

बस! आप कर चुके हैं। अब, tmux को सामान्य रूप से चलाएं, अपने पैन का आकार बदलें, नए पैन बनाएं, नए सत्र बनाएं ... आदि। जब आप उस कॉन्फ़िगरेशन (जो कई विंडो और कई सत्रों में) तक पहुँच चुके हैं, से खुश हैं, तो सत्र को बचाने के लिए बस ctrl + b पर क्लिक करें। परिणामों का परीक्षण करने के लिए, बस सभी tmux को मारें

killall tmux

फिर, फिर से tmux चलाएं

tmux

फिर, tmux के भीतर से ctrl + b पर क्लिक करें फिर ctrl + r (पुनर्स्थापित करने के लिए) जादुई रूप से, आपकी सभी विंडो, पैन और सत्र एक ही ज्यामिति और व्यवस्था के साथ बहाल किए जाते हैं। उम्मीद है कि इससे मदद मिलेगी।

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