আমি ম্যানুয়ালি প্রবেশ না করে প্যানগুলির একটি সেট খোলার জন্য কীভাবে tmux পাব?


30

সুতরাং, আমি একটি প্রকল্প-নির্দিষ্ট tmuxঅধিবেশন তৈরি করতে চাই যা স্বয়ংক্রিয়ভাবে নির্দিষ্ট প্যানে কিছু নির্দিষ্ট কমান্ড পপ করে দেয়। একটি অনলাইন টিউটোরিয়াল এবং tmuxম্যান পৃষ্ঠা অনুসরণ করে , আমি এটিই একটি কনফিগারেশন ফাইলের জন্য নিয়ে আসছি:

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

ফলাফল ... কিছুই না। tmuxকোনও উইন্ডো কার্যকর হয় না এবং কোনও উইন্ডো কার্যকর করা হয় না window

আমি কীভাবে একটি কনফিগারেশন ফাইল তৈরি করতে যাব যা আমাকে প্রাক-এক্সিকিউটেড নির্দিষ্ট কমান্ডগুলির সাথে উইন্ডোজ এবং প্যানগুলির একটি সেট তৈরি করতে দেয়?

উত্তর:


36

আপনার কনফিগারেশন ফাইলটি কাজ করছে, তবে কয়েকটি জটিলতা রয়েছে।

স্বল্প -কালীন কমান্ডগুলি

প্রথমে, আপনি যে কমান্ডগুলি শুরু করছেন ( ls এর উদাহরণগুলি ) তাড়াতাড়ি চলমান শেষ করে। কমান্ডগুলির জন্য উইন্ডো এবং প্যানগুলি তৈরি করা হয়, তবে প্রতিটি কমান্ডটি প্রস্থান করার সাথে সাথে এগুলি অদৃশ্য হয়ে যায়।

যদি আপনার লক্ষ্যটি আসলে আপনার শেষ কনফিগারেশনে এই জাতীয় "এক শট" কমান্ড ব্যবহার করে থাকে তবে আপনার সম্ভবত উইন্ডো বিকল্পটি ব্যবহার করা উচিত 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) as আপনার .tmux.confউইন্ডোজ / পেনগুলির জন্য একটি অধিবেশন তৈরি করে (এটির newজন্য একটি উপাধি new-session) এবং অন্য একটি অধিবেশন কমান্ড আর্গুমেন্ট ছাড়াই tmuxnew-session শুরু করে নির্দিষ্ট ইম্পিটেড কমান্ডের জন্য তৈরি করা হচ্ছে । আপনি যদি ডিফল্ট স্ট্যাটাস বারটি ব্যবহার করে থাকেন, আপনি [1]যখন "অতিরিক্ত" সেশনে থাকবেন তখন আপনি স্ট্যাটাস বারের বাম দিকে একটি দেখতে পাবেন (প্রারম্ভিক অধিবেশনটি .tmux.conf0 হয়)।

আপনি যদি অতিরিক্ত সেশন তৈরি করা এড়াতে চান তবে প্লেইনের tmux attachপরিবর্তে ব্যবহার করুন tmux। আপনার কাছ থেকে প্রাপ্ত আদেশগুলি .tmux.confচলবে, সেশন 0 তৈরি করে এবং তারপরে আপনার ক্লায়েন্ট একটি নতুন তৈরির পরিবর্তে সেই অধিবেশনটিতে সংযুক্ত হবে।


2
ঠিক আছে, আমি সম্ভবত এখানে তিমি স্যান্ডউইচের মতো ঘন হয়ে যাচ্ছি, তবে এই মুহূর্তে আমার কাছে একটি কনফিগারেশন ফাইল রয়েছে যা এর splitwমধ্যে রয়েছে - অন্য কিছুই নয় - এবং আমি এখনও একটি বিভাজন পর্দা পাচ্ছি না কারণ এটি বলে বর্তমান অধিবেশন প্রতিষ্ঠা করতে পারে না। আমি যদি এর newআগে যোগ করি তবে আমি ... একটি উইন্ডো, একটি ফলক পাই। আমি মনে করতে পারি না, আমার জীবনের জন্য শুরুতে দুটি পেন পান।
আমার সঠিক মতামতটি

1
একটি কনফিগার ফাইল new, তারপরে splitwআমার জন্য কাজ করে যখন আমি tmux এর মাধ্যমে শুরু করি tmux attach। একটি জিনিস মনে রাখবেন তা হ'ল .tmux.conf(বা -fবিকল্পের সাথে নির্দিষ্ট ফাইলটি ) কেবল তখনই ব্যবহার করা হয় যদি ইতিমধ্যে কোনও সার্ভার চালু না থাকে। সার্ভার দিয়ে চলছে কিনা তা পরীক্ষা করুন tmux ls। আপনি যদি কোনও সার্ভার ইতিমধ্যে চালু থাকে তখন কোনও ফাইল থেকে কমান্ডগুলি চালনা করতে চান, তবে এটি এটির মতো করুন: tmux source-file /path/to/conf-file-that-creates-a-session-and-windows \; attach(যদি আপনি কোনও সার্ভার না থাকা অবস্থায় .tmux.confএটি -fচালনা করেন তবে আপনার source-fileফাইলটি (বা ফাইল) প্রথমে চালিত হবে তবে আপনার ফাইল)।
ক্রিস জনসন

কনফিগারেশন ফাইলটি -f দিয়ে নির্দিষ্ট করা হচ্ছে - সুতরাং আমি যাচ্ছি tmux new -f myconfig। Config কনফিগারেশন ফাইলের সামগ্রীগুলি কেবল new তারপরেই থাকে splitw। কমান্ড লাইনটি চেষ্টা করার আগে আমি যে কোনও এবং সমস্ত tmux প্রক্রিয়াটি হত্যা করছি tmux -f myconfig। আমি দুটি পেন পাই না। এই পয়েন্টটি কী করতে হবে তা নিয়ে আমি এখানে সত্যিই ক্ষতি করছি (কেবল tmux ছেড়ে দেওয়া বাদ দিয়ে)।
আমার সঠিক মতামতটি

4
@ জাস্ট: আপনি কোনও কমান্ড আর্গুমেন্ট ব্যতীত ব্যবহার করুন -fবা না করুন (যা নতুন সার্ভারের জন্য আপনার কনফিগার ফাইলটি যা করবে তার উপরে একটি নতুন সেশন তৈরি করবে)। আপনার প্রাক-বিভক্ত উইন্ডোটি সেশন 0-এ তৈরি করা হয়েছে, তবে অন্তর্নিহিত কমান্ডটি একটি অতিরিক্ত অধিবেশন তৈরি করছে (এবং সংযুক্ত হচ্ছে) (অধিবেশন 1; আপনার স্থিতি রেখায় সন্ধান করুন)। আপনার প্রাক-বিভক্ত উইন্ডোটি লুকিয়ে থাকা নতুন সেশনটি তৈরি করা এড়াতে ব্যবহার করুন । tmuxtmux new-sessionnew-session[1]tmux -f myconfig attach
ক্রিস জনসেন

1
ঠিক আছে, আমি অনুমান করি পড়া শিখলে শেষ পর্যন্ত আমার মূল্য পরিশোধ হয়ে যাবে। :) প্রচেষ্টা এবং উত্তরের জন্য ধন্যবাদ। এখন সবকিছু ঠিকঠাক চলছে। আমি চাই এখানে সুনাম "টিপিং জারে" থাকুক যাতে আমি আপনাকে কেবল একটি গৃহীত উত্তর ছাড়াও আরও কিছু দিতে পারি।
আমার সঠিক মতামতটি

9

আমি "ম্যানুয়ালি প্রবেশ" দ্বারা আপনি কী বোঝাতে চেয়েছেন তা আমি নিশ্চিত নই, তবে আমি এটি এটি করি। আমি একটি "অটোস্টার্ট" স্ক্রিপ্ট লিখেছিলাম যা আমার উইন্ডো ম্যানেজার চালু করে। এতে রয়েছে:

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

যেখানে প্রতিটি। মূল্যায়ন ফাইলটি এরকম কিছু দেখায়:

#!/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

অপেক্ষা করুন, আরও আছে! আমি কনসোলের সাথে লোড করে রেখেছি sess

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
.
.
.

তারপরে আমি কনসোল চালু করতে F12 টিপুন।


কনসোলটি ভেঙে গেছে বলে মনে হচ্ছে তাই আমি টার্মিনালে চলে এসেছি , যা ভালভাবে কাজ করে। Tmux- ব্যবহারকারীদের মেলিং তালিকায় আমার আরও বিস্তারিত পোস্ট রয়েছে।
জন স্মিট

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

টিমাক্স উইন্ডো / সেশনগুলি স্বয়ংক্রিয় করার জন্য আমি টিমোকিলটি খুব দরকারী বলে মনে করেছি

এটি রুবিতে লেখা যাতে আপনার এটি ইনস্টল করা দরকার।

এখানে একটি নমুনা কনফিগারেশন:

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

আপনার উইন্ডো এবং বিভাজনের ব্যবস্থা থাকতে পারে।


4

টিমকয়লের অনুরূপ অন্য একটি বিকল্প হ'ল টিমাক্সিনেটর , এটি সক্রিয় বিকাশে রয়েছে এবং বেশ ভালভাবে কাজ করে। এছাড়া আশ্চর্যজনক উপর (এবং ধরনের পর্যালোচনা এর) সুপারিশ করা হচ্ছে উত্পাদনশীল মাউস-মুক্ত উন্নয়ন: tmux থেকে বাস্তবমুখী বইয়ের থাকটি


এটি টিমোকিলের তুলনায় একটি বিট ক্লিনার (তবে তবে এটির সাথে খুব মিল) পাওয়া গেছে এবং এখনই এটি ব্যবহার করছি। এটি কীভাবে কাজ করে তাতে আমি খুব খুশি!
আকতাউ

4

**

  • ভাল আপনার সেশন সংরক্ষণ করুন!

** আমি দেখতে পেয়েছি যে নিজের মতো অলস প্রশাসকের জন্য, আমি পুরোপুরি এটি নির্মাণের চেষ্টা করে ঘন্টা ব্যয় না করে tmux সেশনটি সংরক্ষণ করব। আমি 30 টিরও বেশি সার্ভার পরিচালনা করছি এবং কনফিগারেশনের সাথে সর্বদা পরিবর্তন হওয়া সহ আমার tmux সেশনগুলি গতিশীল। এটি ঘাড়ে ব্যথা ছিল, যতক্ষণ না আমি সম্প্রতি আবিষ্কার করেছি tmux- পুনরুত্থান এই প্লাগইনটি দুর্দান্ত। একবার চেষ্টা করে দেখো. বর্তমানে, উবুন্টু সংগ্রহস্থলের 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

তারপরে line / .tmux.conf এর নীচে এই লাইনটি ডিডি করুন (যদি ~ / .tmux.conf উপলব্ধ না হয় তবে একটি খালি ফাইল তৈরি করুন)

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

আমি line / .tmux.conf এর শেষে এই লাইনটিও যুক্ত করি যাতে প্লাগইনটি আমি চালিত সমস্ত প্রোগ্রামের সেশনগুলি সংরক্ষণ করে

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

তারপরে tmux এনভায়রনমেন্ট পুনরায় লোড করুন।

tmux source-file ~/.tmux.conf

এটাই! তুমি পেরেছ. এখন, টিএমউক্সকে স্বাভাবিক হিসাবে চালান, আপনার পেনগুলি পুনরায় আকার দিন, নতুন ফলক তৈরি করুন, নতুন সেশন তৈরি করুন ... ইত্যাদি। আপনি যখন পৌঁছেছেন এমন কনফিগারেশনে আপনি খুশি হন (বেশ কয়েকটি উইন্ডো এবং কয়েকটি সেশনে), সেশনটি সংরক্ষণ করতে কেবল ctrl + b ক্লিক করুন। ফলাফলগুলি পরীক্ষা করার জন্য, সমস্ত টিএমউক্সকে হত্যা করুন

killall tmux

তারপরে, আবার চালুন tmux

tmux

তারপরে, tmux এর মধ্যে থেকে ctrl + b ক্লিক করুন তারপরে ctrl + r (পুনরুদ্ধারের জন্য) যাদুতে আপনার সমস্ত উইন্ডো, প্যান এবং সেশন একই জ্যামিতি এবং বিন্যাসের সাথে পুনরুদ্ধার করা হবে। আশা করি এটি সাহায্য করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.