Tmux- এ সমস্ত প্যানে কিভাবে একটি কমান্ড প্রেরণ করবেন?


189

আমি :clear-historyএকটি বিশাল স্ক্রোলব্যাকের সাহায্যে কলগুলিতে কল করতে চাই । যাইহোক, আমি বিভিন্ন উইন্ডোর সমস্ত প্যানে এই কমান্ডটি প্রেরণের একটি উপায় স্ক্রিপ্ট করতে চাই।

আমি জানি যে এই প্রশ্নটির সৌজন্যে সমস্ত উইন্ডোতে একটি কমান্ড কীভাবে প্রেরণ করা যায় তবে আমি কীভাবে কোনও উইন্ডোর সমস্ত প্যানে একটি আদেশ পাঠাব?

send-keysএবং synchronize-panestmux ম্যানপেজ থেকে মনে আসে, তবে কীভাবে তাদের একসাথে বিবাহ করব তা আমি নিশ্চিত নই। তবে এটি করার সহজ উপায় আছে।

অতিরিক্ত পর্যবেক্ষণ:

এই সম্পর্কে একটু চিন্তা tmux list-panes -aকরে, বর্তমান অধিবেশনটিতে সমস্ত প্যানগুলি তালিকাভুক্ত করা হবে বলে মনে হচ্ছে। শুরুতে খুব দরকারী useful আমি এখান থেকে কোথায় যাব?


: প্রতিটি ফলকে জন্য প্রযোজ্য, প্রতিটি উইন্ডোতে, প্রতিটি সেশনে একটি সমাধান খুঁজে বের করার আশায় এই প্রশ্নের আসছে তাদের জন্য scripter.co/command-to-every-pane-window-session-in-tmux
chb

উত্তর:


351

আপনি কি একাধিক পেন সহ tmux উইন্ডোতে অনুসরণ করার চেষ্টা করেছেন?

Ctrl-B :

setw synchronize-panes on

clear history

52
কেবল সম্পূর্ণতার খাতিরে, আপনি যদি করেন তা বন্ধ করার জন্যCtrl-b :setw synchronize-panes off
মিচ

19
এবং আপনি এর জন্য শর্টকাটগুলি যুক্ত করতে পারেন ~/.tmux.conf: bind -n C-x setw synchronize-panes on এবং bind -n M-x setw synchronize-panes off
গুনিসাস

4
টগলিংয়ের জন্য একই শর্টকাট সেট করা সম্ভব?
আর্নল্ড রোয়া

20
@ আর্নল্ডরোয়া হ্যাঁ, আপনি চলে গেলে বিকল্পটি টগল করবে on/off। সুতরাংbind -n C-x setw synchronize-panes
সংবেদন

1
আমি যদি bind -n C-x setw synchronize-panesশর্ট কাটটি যুক্ত করি তবে আমি অনুরোধ করতে টিপবো? এটি কি উপসর্গ + সি & এক্স আমি প্রচুর বিকল্পগুলি চেষ্টা করেছিলাম
বিল গোল্ডবার্গ

28

পার্টিতে কিছুটা দেরি হলেও আমি কেবল একটি কমান্ড প্রেরণের জন্য সিঙ্ক্রোনাইজ-প্যানগুলি সেট এবং আনসেট করতে চাইনি তাই আমি টিএমউক্সের চারপাশে একটি মোড়ক ফাংশন তৈরি করেছি এবং একটি কাস্টম ফাংশন যুক্ত করেছি send-keys-all-panes

_tmux_send_keys_all_panes_ () {
  for _pane in $(tmux list-panes -F '#P'); do
    tmux send-keys -t ${_pane} "$@"
  done
}

এই ফাংশনটি (সুবিধার্থে) কল করা সহজ করার জন্য আমি tmux কমান্ডের চারপাশে একটি মোড়ক তৈরি করি। মোড়ক এবং উপরের কোডগুলি সমস্ত এখানে

এটি আমাকে চালাতে tmux send-keys-all-panes <command>বা সমস্ত প্যানে tmux skap <commandপাঠাতে <command>দেয়।

মনে রাখবেন যে tmux আমার র‍্যাপার ফাংশনটি tmux_pp এর সাথে যুক্ত হয়।


এটি বাশ, তবে tmux কমান্ড প্রম্পট থেকে কেউ একই কাজ করতে পারে, আমি বলতে চাইছিprefix + :
Rho Phi

কীভাবে বা সম্ভব তা আমি জানি না। আপনার ব্যবহারের ক্ষেত্রে কী এমন দৃশ্যের দরকার যা আপনার মাধ্যমে একটি কমান্ড প্রেরণ করা প্রয়োজন <prefix>:?
kshenoy

আমি বাশ স্নিপেট ( : run "yourscript.sh yourargs...") কল করার পরামর্শ দেব ; যদি আপনার কমান্ডের আউটপুট থাকে আপনার সক্রিয় বা নির্দিষ্ট ফলকটি আপনি কি টিপুন না হওয়া পর্যন্ত ফলাফল প্রদর্শন করবে তবে এই ক্ষেত্রে এটি হওয়া উচিত নয়। অবশ্যই আপনি এটি পছন্দ করতে পারেন / পছন্দ অনুসারে এটি আবদ্ধ করতে পারেন। অন্যদিকে, অভ্যন্তরীণ প্রক্রিয়াগুলি আপনার কীস্ট্রোকগুলি বা তাদের প্রভাবগুলি আলাদাভাবে ব্যাখ্যা করতে পারে, তাই কোনও শ্বেত তালিকা বা ব্ল্যাকলিস্টের #{pane_current_cmd}প্রয়োজন হতে পারে। আমার কাছে সিআরটিএল + কে সিআরটিএল + এল এবং স্পষ্ট-ইতিহাস প্রেরণ করতে বাধ্য; এটি শাঁসের জন্য ভাল কাজ করে তবে ক্লোবারগুলি ভিমের বাফার করে। আমার সিটিআরএল + কে সম্প্রচার করার আগে আমার পরিশোধন প্রয়োজন।
জন পি

এটি কোনও এক্সওয়াই সমস্যা হতে পারে; Tmux কমান্ড প্রম্পটটি দরকারী, তবে মনে হচ্ছে আপনি এটি ব্যবহার করছেন কারণ আপনার কাছে অন্য কোনও কমান্ড প্রম্পট খোলা নেই। আপনি যদি পছন্দ করেন - আপনার পছন্দসই শেলটি দিয়ে একটি অতিরিক্ত ফলকটি টগল করতে এবং ফোকাস করার জন্য <prefix>:, প্রতিটি আদেশের আগে না পাঠানোর পরিবর্তে, কমান্ডটি রেখে যাওয়ার পরে আউটপুটটি হারাতে এবং সমস্ত অসুবিধাগুলি কী-বাইন্ডিং সেটআপ করতে পারেন the Tmux এর মাধ্যমে এক্সিকিউটিভ নিয়ে আসুন। উদাহরণস্বরূপ, <prefix>:run "man cat"মানুষের উপস্থিতি pidof manবা এমনকি এমনকি ps auxf | grep man'কম' হিসাবে দেখা দেয় না , মানুষের জন্য আমার বর্তমান পেজার।
জন পি

লিঙ্কটি মারা গেছে
ম্যাটিউজ পিয়োট্রোস্কি

10

জুন 2019 আপডেট করুন

প্যানগুলি সিঙ্ক্রোনাইজ করার জন্য কীভাবে আপনার নিজের বাইন্ডিং কনফিগার করতে হয় তার দ্রুত চিত্রণ ।

আমার মধ্যে নিম্নলিখিতগুলি যুক্ত করা হয়েছে tmux.conf(মন্তব্যগুলি অবশ্যই আমার সামগ্রিক কনফিগারেশনের ক্ষেত্রে প্রযোজ্য):

# synchronize all panes in a window
# don't use control S, too easily confused
# with navigation key sequences in tmux (show sessions)
unbind C-S
bind C-Y set-window-option synchronize-panes

এখন, আমি একাধিক প্যানে জুড়ে কমান্ডগুলি সিঙ্ক্রোনাইজ করার ক্ষমতা টগল করতে পারি <C-a><C-y>

(হ্যাঁ, আমি Ctrl এ বাইন্ড কীটি পুনরায় তৈরি করেছি)।


4

উপরের উত্তরগুলির কোনওটিই আমার পক্ষে কার্যকর হয়নি (tmux v2.3), তবে এটি বাশ কমান্ড লাইন থেকে:

for _pane in $(tmux list-panes -a -F '#{pane_id}'); do \
  tmux clear-history -t ${_pane}  ; done

'ক্লিয়ার-হিস্ট্রি' ব্যতীত tmux কমান্ডের জন্য আরও সাধারণীকৃত স্ক্রিপ্ট, কেবলমাত্র সেই উপাদানটিকে একটি প্যারামিটার দিয়ে প্রতিস্থাপন করবে, যেমন। $ 1। আপনি যদি tmux কমান্ডের একটি সিরিজ পরিচালনা করতে কোনও স্ক্রিপ্ট লিখতে চান তবে সাবধান থাকবেন, "-t $ {_ ফলক}" প্রত্যেকটির জন্য প্রয়োগ করা দরকার।

নোট করুন যে -aপরামিতিটি tmux list-panesসমস্ত সেশনে সমস্ত উইন্ডোতে সমস্ত পেনগুলি আবরণ করতে হবে। তা ছাড়া, আপনার বর্তমান টিএমউক্স উইন্ডোতে কেবল প্যানগুলি প্রভাবিত হবে। আপনি একটির বেশি tmux অধিবেশন খোলা আছে এবং শুধুমাত্র বর্তমান সেশনের মধ্যে ফলকগুলি কমান্ড প্রয়োগ করতে চান, তাহলে প্রতিস্থাপন -aসঙ্গে -s(এটা tmux মানুষ পৃষ্ঠা থেকে সব)।

উপরের প্রতিটি জবাব সম্পর্কে সরাসরি মন্তব্য করার মতো মোড পয়েন্ট আমার কাছে নেই, সুতরাং কেন তারা আমার জন্য কাজ করছে না:

@ শৈলেশ-গার্গের উত্তরে আমার যে সমস্যাটি হয়েছিল তা হ'ল সিঙ্কটি কেবল প্যানগুলির মধ্যে জারি করা কমান্ডগুলিকেই প্রভাবিত করেছিল, প্যানের Ctrl-B :বাইরে থাকা টিএমউক্স কমান্ড জারি করে না ।

@ শ্যনয়ের জবাব নিয়ে আমার যে তিনটি সমস্যা ছিল তা হ'ল:

  1. এটি একটি ফলকের মধ্যে কীস্ট্রোক প্রেরণ করে, সেই ফলকের tmux ক্রিয়াকলাপকে নয়, উদাহরণস্বরূপ, যদি কারটিতে একটি ব্যাশ শেল থাকে এবং "স্পষ্ট-ইতিহাস" প্রেরণের জন্য স্ক্রিপ্ট ব্যবহার করা হয়, সেগুলিই মূল কী হবে ro বাশ কমান্ড-লাইনে উপস্থিত হবে। একটি কাজের পরিপ্রেক্ষিতে "tmux ক্লিয়ার-ইতিহাস" প্রেরণ করা বা "tmux" "" $ @ "এ প্রি-পেন্ড করা হবে, তবে উত্তরটি আমার অন্যান্য সমস্যার কারণে আমি উত্তরটি সম্পাদনা করি নি;
  2. আক্ষরিকভাবে লাইনটি না ভেঙে নতুন লাইনের চরিত্রটি কীভাবে প্রেরণ করা যায় তা আমি বুঝতে পারি না;
  3. এমনকি যখন আমি এটি করেছি, "tmux ক্লিয়ার-ইতিহাস" প্রেরণের কোনও প্রভাব ছিল না।

3

আমার tmux সংস্করণটি 1.9a এবং এটি আমার জন্য কাজ করে, একটি কী চালু এবং বন্ধ উভয়ের জন্যই যথেষ্ট

bind-key X set-window-option synchronize-panes\; display-message "synchronize-panes is now #{?pane_synchronized,on,off}"

2
tmux send-keys -t <session id> <command> C-m  

"সেশন আইডি" এবং সেই অনুযায়ী "কমান্ড" প্রতিস্থাপন করুন।


এই ভিনগ্রহের ভাষা সম্পর্কে কিছু বলতে চাই
মুহাম্মদ ওমর আসলাম

কি? ইংরাজী কঠিন নয়। তবে আপনার যদি কিছু বলার থাকে তবে তা বলুন।
আরজে

4
:Dডুড আপনাকে নিজের উত্তরের সাথে কিছু বিবরণ যুক্ত করতে হবে কারণ এটিতে খুব ন্যূনতম পাঠ্য রয়েছে এবং সেই কারণেই স্ট্যাকওভারফ্লো এটি একটি স্প্যাম বা নিম্নমানের পোস্ট হিসাবে সনাক্ত করেছে যাতে এটির কিছুটা যুক্ত হয় যাতে এটি এর অধীনে না আসে।
মুহাম্মদ ওমর আসলাম

6
এটি মজার, গৃহীত উত্তরের কোনও বিবরণ এবং কেবল কোড নেই, তবে যাই হোক না কেন।
আরজে

0

এটি করার জন্য এটি আমার ইউটিলিটি ফাংশন, ফলকটিতে কোনও কিছুই চলমান না থাকলে কেবলমাত্র আদেশটি কার্যকর করা হবে।

#!/bin/bash

_send_bash_command_to_session() {
    if [[ $# -eq 0 || "$1" = "--help" ]] ; then
        echo 'Usage: _send_bash_command_to_session $session_name what ever command you want: '
        return
    fi
    input_session="$1"
    input_command="${@:2}"
    for _pane in $(tmux list-panes -s -t ${input_session} -F '#{window_index}.#{pane_index}'); do
        # only apply the command in bash or zsh panes.
        _current_command=$(tmux display-message -p -t ${input_session}:${_pane} '#{pane_current_command}')
        if [ ${_current_command} = zsh ] || [ ${_current_command} = bash ] ; then
            tmux send-keys -t ${_pane} "${input_command}" Enter
        fi
    done
}

tmux_set_venv() {
    _current_session=$(tmux display-message -p '#{session_name}')
    _send_bash_command_to_session ${_current_session} workon $1
}

দেব নামে একটি সেশনের লক্ষ্য চিহ্নিতকরণ , ভিমে বা অন্য কোনও এক্সিকিউটেবলের সাথে প্যানে কমান্ড চালানো এড়ানো bashবা সমস্ত প্যানে অজগর ভার্চুয়ালেনভকে সক্ষম করা zsh:

_send_bash_command_to_session dev workon myvirtualenv

বা মনে রাখা সহজ: বর্তমান সেশনে এটি করা:

tmux_set_venv myvirtualenv

এই ফাংশনটি সহ আমার কনফিগারেশন ফাইলটি সন্ধান করুন

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