একাধিক কমান্ডে একটি tmux কী বাঁধাই


37

আমি বেশ কয়েকটি সার্ভারের পরামিতিগুলি পর্যবেক্ষণ করতে মাল্টিপেন tmux উইন্ডো চালু করি। Ctrl-S এর সাহায্যে আমি অন্য মনিটর কমান্ডের সাহায্যে একটি নতুন উইন্ডো খুলতে পারি।

এখন আমি বেশ কয়েকটি মনিটরের সাথে আরেকটি মাল্টিপেন উইন্ডো খুলতে Ctrl-Q কে আবদ্ধ করতে চাই । আমি একাধিক কমান্ডের কী কীভাবে বাঁধবো? আমি তাদের সাথে শৃঙ্খলাবদ্ধ করার চেষ্টা করেছি; এবং \; - কিছুই সাহায্য করে না। দয়া করে নীচে ... এর পরিবর্তে আমার কী ব্যবহার করা উচিত তা পরামর্শ দিন ।

যখন এটির ওভারল্যাপ করা ব্যাকগ্রাউন্ড কমান্ডগুলি স্থগিত করার জন্য আমি একটি নতুন উইন্ডো খুলি তখন কি এটি সম্ভব?

    tmux new-session "monitor1" \;\
            split-window -v "monitor2" \;\
            select-pane -U \;\
            split-window -v -h -p 60 "monitor3" \;\
            bind-key -n C-s new-window "monitor4" \;\
            bind-key -n C-q "..."

উত্তর:


37

টড ফ্রিড ঠিক আছে, এটি করার জন্য "সঠিক" উপায়টি ব্যবহার করা হচ্ছে \;। প্রকার, রকম. তবে একটি ছিনতাই আছে।

আপনি দেখুন, আপনি tmux কমান্ডের সাথে একসাথে tmux কমান্ডের ক্রমে যোগদান করেন ;। সুতরাং, tmux দ্বারা উত্সযুক্ত একটি ফাইলে, আপনি বলতে পারেন

new-session "monitor1" ; split-window -v "monitor2"

যদি, কোনও কারণে, আপনি যে সমস্ত এক লাইনে চেয়েছিলেন। এখন, আপনি যে এক লাইন যৌগ বিবৃতি দিতে পারেন tmuxএকটি শেল থেকেও কমান্ড কিন্তু; যাতে শেল জন্য আরেকটি যুক্তি যেমন ব্যাখ্যা করে পালিয়ে করা আবশ্যক tmux। সুতরাং শেল থেকে উপরের সমতুল্য হয়

$ tmux new-session "monitor1" \; split-window -v "monitor2"

একইভাবে, tmux bind-keyকমান্ড টিপতে টিউমাক্স কমান্ড এবং আর্গুমেন্টগুলি চালিত করার জন্য একটি আর্গুমেন্ট গ্রহণ করে। আপনি যদি C-qtmux দ্বারা উত্পন্ন উত্সযুক্ত কোনও ফাইলের ভিতর থেকে উপরের ক্রমটি আবদ্ধ করতে চান তবে আপনি বলবেন say

bind-key -n C-q new-session "monitor1" \; split-window -v "monitor2"

এখানে আমরা ; tmux থেকে পালিয়ে এসেছি , যাতে tmux এটিকে bind-keyকমান্ডের সমাপ্তি হিসাবে ব্যাখ্যা করে না , তবে কীটির bind-keyবাউন্ড মান হিসাবে একটি যৌগিক কমান্ড গঠনের জন্য এটি অন্য যুক্তি হিসাবে বলেছে C-q

সুতরাং যখন আমরা টিএমউक्सটি শেল থেকে করতে চাই তখন কী হয়? অনেকটা পালাচ্ছে।

$ tmux bind-key -n C-q new-session "monitor1" \\\; split-window -v "monitor2"

প্রথমত, আমরা পালিয়ে আছে \ এবং The ;থেকে প্রতিটি শেল , শেল দুটি অক্ষর পাস ঘটাচ্ছে \;একটি আর্গুমেন্ট হিসাবে tmux। এরপরে এটি ;tmux থেকে পালিয়ে যায় , যার ফলে এটি সম্পূর্ণ যৌগিক বিবৃতিটিকে বাইন্ডিং হিসাবে নির্ধারিত করে C-q


এখন, যা কিছু বলেছে, আপনি যদি বার বার এর মতো জটিল টিএমউক্স সেটআপ ব্যবহার করেন তবে আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি এটি রাখার জন্য একটি tmux ফাইল তৈরি করুন:

# In split-windows.tmux:
new-session "monitor1"
split-window -v "monitor2"
bind-key -n C-s new-window "monitor4"
# ...etc...

এবং তারপর:

$ tmux source split-windows.tmux  # (or even make an alias for this)

সেভাবে বজায় রাখা অনেক সহজ হবে।


3
কমান্ড লাইন থেকে একাধিক কমান্ডের বাইন্ডিং কীগুলি দেখতে কম ভয়ঙ্কর করে তুলতে, আপনি \;$ tmux bind-key -n C-q new-session "monitor1" '\;' split-window -v "monitor2"
টিম হিপ

12

সুতরাং আসল উত্তরটি হ'ল: আপনি অর্ধবৃত্তের পরে ব্যাকস্ল্যাশ দিয়ে শৃঙ্খলাবদ্ধ কমান্ডগুলি।

bind-key C send-keys foo \; send-keys bar

আপনি এটি আপনার tmux.conf এ রেখেছিলেন, বা tmux ":" থেকে প্রম্পট থেকে চালাবেন


এটি দুর্দান্ত ছিল এবং নেস্টেড tmux সেশনটি ব্যবহার করার জন্য এবং নেস্টেড tmux উইন্ডোতে নেভিগেট করার জন্য কাজ করেছিল।
পল

1
এটি শেল কমান্ড লাইন থেকে কাজ করে না । অর্থাৎ m tmux বাইন্ড-কী সি প্রেরণ-কীগুলি foo \; কী-
বারস

হ্যাঁ, আপনি এটি টিএমউক্সের মধ্যে থেকে চালাবেন। আপডেট করতে আপডেট হয়েছে
টড মুক্ত হয়েছে

নিস! এটি পুরোপুরি কাজ করে ... মুচস গ্রাসিয়াস!
ব্র্যাড পার্কস

দ্রষ্টব্য: ক; একক উদ্ধৃতিতে পালানোর দরকার নেই
এলিগ

2

আপনি একটি ছোট workaround সঙ্গে এটি করতে সক্ষম। একটি স্ক্রিপ্ট চালানোর জন্য প্রস্তাবিত উত্তরের অনুরূপ (যা আপনার ক্ষেত্রে পরিচালনা করে) এটি সাধারণত "রান-শেল" ব্যবহার করে এবং tmux কে নিজেই শেল কমান্ড হিসাবে কল করে কাজটি করতে পারে।

bind-key z run-shell "tmux send-keys "xyz" ; tmux clear-history; clear" 

যা 'xyz' কী, tmux 'ক্লিয়ার-হিস্ট্রি' কমান্ড প্রেরণ করবে এবং তারপরে 'ক্লিয়ার' শেল বিল্টিন কল করবে।

পুরো স্ট্রিংটি কেবল একাধিক শেল কমান্ড ক্রম।


1

আপনি আপনার .tmux.confফাইলে মূল বাইন্ডিংগুলিতে এরকম কিছু যুক্ত করতে পারেন :

bind q send-keys "/home/jackhab/bin/tmux-new-session.sh" \; send-keys "Enter"

এবং tmux-new-session.shআপনি থাকতে পারেন:

#! /usr/bin/env bash
tmux new-session "monitor1"
tmux split-window -v "monitor2"
tmux select-pane -U
tmux split-window -v -h -p 60 "monitor3"
...
exit

1

এখানে প্রদর্শিত সমস্ত কিছুই কাজ করবে না, কারণ এটি

bind q send-keys "command1" \; send-keys "command2"

কমান্ড 2 তত্ক্ষণাত্ কার্যকর করা হবে এবং q কেবলমাত্র "কমান্ড 1" -র কী-পাঠাতে বাধ্য থাকবে

সমাধান এখানে:

bind R source-file "$HOME/.tmux/reload.tmux"

~ / .Tmux / reload.tmux ফাইলটিতে একাধিক কমান্ড দেওয়া হয়েছে:

source-file "$HOME/.tmux.conf" 
display-message "Configuration reloaded."

1
ওহ অপেক্ষা করুন, পিজা যা বলেছিলেন তা ব্যবহার করুন (\\\;) :-)
lzap
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.