যেহেতু আপনি উল্লেখ করেছেন যে আপনি আপনার নির্দিষ্ট পরিস্থিতির জন্য সমস্যার সমাধান করেছেন, সাধারণ উদ্দেশ্যে একটি সমাধানের নীচে। xdotoolএর --syncবিকল্পটির জন্য ধন্যবাদ , আমি যে পরীক্ষাগুলি চালিয়েছিলে এটি নির্ভরযোগ্যভাবে কাজ করে; আমি নির্দিষ্ট টার্মিনাল উইন্ডোগুলিতে কমান্ডগুলি "প্রেরণ" করতে পারি এবং এটি ব্যতিক্রম ছাড়াই পুরোপুরি চলে।
এটি বাস্তবে কীভাবে কাজ করে
সমাধানটি একটি স্ক্রিপ্ট থেকে বিদ্যমান যা দুটি বিকল্পের সাথে চালানো যেতে পারে
-setএবং -run:
করতে সেট এই উদাহরণে 3 টার্মিনাল জানালার কোনও একটি সংখ্যার আপ (খোলা):
target_term -set 3
তিনটি নতুন টার্মিনাল খুলবে, তাদের উইন্ডো আইডি একটি লুকানো ফাইলের মধ্যে মনে থাকবে:

স্পষ্টতার কারণে আমি টার্মিনাল উইন্ডোটি ন্যূনতম করলাম আমি কমান্ডটি চালিয়েছি :)
এখন যেহেতু আমি তিনটি উইন্ডোজ তৈরি করেছি, আমি রান কমান্ডের মাধ্যমে তাদের যে কোনও একটিতে কমান্ড প্রেরণ করতে পারি (যেমন):
target_term -run 2 echo "Monkey eats banana since it ran out of peanuts"
নীচে প্রদর্শিত হিসাবে, কমান্ডটি দ্বিতীয় টার্মিনালে চলেছিল:

পরবর্তীকালে, আমি প্রথম টার্মিনালে একটি আদেশ পাঠাতে পারি:
target_term -run 1 sudo apt-get update
উপার্জন sudo apt-get updateTerminal 1 সঞ্চালন করুন:

এবং তাই ...
কিভাবে বসাব
স্ক্রিপ্ট উভয়ের প্রয়োজন wmctrlএবং xdotool:
sudo apt-get install wmctrl xdotool
নীচের স্ক্রিপ্টটি একটি খালি ফাইলে অনুলিপি করুন, এটি target_term(কোনও এক্সটেনশন নয়) হিসাবে নিরাপদ করুন ~/bin( ~/binপ্রয়োজনে ডিরেক্টরি তৈরি করুন ।
স্ক্রিপ্টটি সম্পাদনযোগ্য করুন (ভুলে যাবেন না) এবং লগ আউট / ইন বা রান করুন:
source ~/.profile
যুক্তি হিসাবে প্রয়োজনীয় উইন্ডোগুলির সংখ্যা সহ এখন আপনার টার্মিনাল উইন্ডোজ সেটআপ করুন:
target_term -set <number_of_windows>
এখন আপনি কমান্ডটি দিয়ে আপনার কোনও একটি টার্মিনালকে "প্রেরণ" করতে পারেন:
target_term -run <terminal_number> <command_to_run>
এই পান্ডুলিপি
#!/usr/bin/env python3
import subprocess
import os
import sys
import time
#--- set your terminal below
application = "gnome-terminal"
#---
option = sys.argv[1]
data = os.environ["HOME"]+"/.term_list"
def current_windows():
w_list = subprocess.check_output(["wmctrl", "-lp"]).decode("utf-8")
w_lines = [l for l in w_list.splitlines()]
try:
pid = subprocess.check_output(["pgrep", application]).decode("utf-8").strip()
return [l for l in w_lines if str(pid) in l]
except subprocess.CalledProcessError:
return []
def arr_windows(n):
w_count1 = current_windows()
for requested in range(n):
subprocess.Popen([application])
called = []
while len(called) < n:
time.sleep(1)
w_count2 = current_windows()
add = [w for w in w_count2 if not w in w_count1]
[called.append(w.split()[0]) for w in add if not w in called]
w_count1 = w_count2
return called
def run_intterm(w, command):
subprocess.call(["xdotool", "windowfocus", "--sync", w])
subprocess.call(["xdotool", "type", command+"\n"])
if option == "-set":
open(data, "w").write("")
n = int(sys.argv[2])
new = arr_windows(n)
for w in new:
open(data, "a").write(w+"\n")
elif option == "-run":
t_term = open(data).read().splitlines()[int(sys.argv[2])-1]
command = (" ").join(sys.argv[3:])
run_intterm(t_term, command)
মন্তব্য
স্ক্রিপ্টটি সেট করা আছে gnome-terminal, তবে applicationস্ক্রিপ্টের প্রধান অংশটি পরিবর্তন করে কোনও টার্মিনাল (বা অন্য প্রোগ্রামের জন্য) ব্যবহার করা যেতে পারে :
#--- set your terminal below
application = "gnome-terminal"
#---
- উপরের কমান্ডগুলি (অবশ্যই) কোনও স্ক্রিপ্ট থেকে চালানো যেতে পারে আপনি যদি কোনও ধরণের সিমুলেশনের জন্য এটি ব্যবহার করতে লিল করেন তবে।
- উভয় লক্ষ্যযুক্ত উইন্ডোতে ফোকাস না হওয়া এবং কমান্ডটি টাইপ করা শেষ না হওয়া পর্যন্ত স্ক্রিপ্ট অপেক্ষা করে, সুতরাং কমান্ডটি সর্বদা ডান টার্মিনাল উইন্ডোতে অবতরণ করবে।
বলার দরকার নেই যে স্ক্রিপ্টটি কেবলমাত্র টার্মিনাল সেটআপ (উইন্ডোজ) দিয়ে কাজ করে যা কমান্ড দ্বারা ডাকা হয়েছিল:
target_term -set
টার্মিনাল উইন্ডোগুলি তখন স্ক্রিপ্ট দ্বারা "লেবেলযুক্ত" হবে, যেমন আপনি আপনার প্রশ্নের উল্লেখ করেছেন।
- আপনি যদি নতুন
target_termসেশন শুরু করেন, স্ক্রিপ্ট দ্বারা নির্মিত লুকানো ফাইলটি কেবল ওভাররাইট করা হবে, অন্যথায় এটি অপসারণ করার প্রয়োজন নেই।