রিমোট অ্যাক্টিভ টার্মিনালে কমান্ড কার্যকর করুন


10

ধরুন আপনার কাছে একটি টার্মিনাল এমুলেটর (টি 1) খোলা রয়েছে পিআইডি 6350 দিয়ে।

অন্য টার্মিনাল থেকে এই কমান্ডটি লিখুন (সি 1):

echo "ls\n" > /proc/6350/fd/0

এটি lsটি 1 এ লিখেছে এবং নতুন লাইন তবে এটি কার্যকর করে না। কেন?

আমি এর cat|bashসাথে ব্যবহার করার চেষ্টা করেছি echo "ls\n" > /proc/catid/fd/0কিন্তু এটি এখনও কার্যকর হয় নি।

আমি কীভাবে অন্য টার্মিনালে কমান্ডটি প্রতিধ্বনি করতে পারি এবং কমান্ডটি কার্যকর করা যায়?

সম্ভাব্য উত্তর:

$ mkfifo toto;
$ bash < toto;
$ echo "ls" > toto;

এক্ষেত্রে আপনি সরাসরি টার্মিনালে সরাসরি লিখতে পারবেন না (এই টার্মিনালে কমান্ড (সি 1) প্রদর্শিত জিনিসটি সবকিছু একইভাবে প্রদর্শিত হয়)।



আমি এটি পড়েছি, তবে এটি খুব সহায়ক নয়।
rvlander

1
আপনাকে এটি করার উপায় দেওয়ার মতো এটি "দরকারী" নাও হতে পারে, তবে এটি আপনার প্রশ্নের উত্তর দেয়: আপনি পারবেন না। আপনি আমাদের শেষ লক্ষ্যটি অর্জন করতে চেষ্টা করতে পারেন এবং অন্য কোনও উপায় আছে কিনা তা দেখতে পারেন।
কেভিন

ঠিক আছে আপনি পারবেন না তবে অন্য টার্মিনালে কেন পাঠ্য প্রদর্শিত হবে?
rvlander

কারণ আপনি টেক্সটটি টার্মিনাল ইন্টারফেসে পাঠিয়েছেন, শেলের কাছে নয়।
রাশ

উত্তর:


11

একটি কমান্ড লাইন ইউটিলিটি রয়েছে যা ttyechoঅন্য টার্মিনালে (tty / pts) কমান্ড প্রেরণ করতে পারে এবং কমান্ডটি কার্যকর করতে পারে।

sudo ttyecho -n /dev/pts/5 ls

দেখুন: অন্যান্য টার্মিনালগুলিতে কমান্ড বা ডেটা প্রেরণের ইউটিলিটি (tty / pts)

আরও দেখুন: ttyechoগিথুব এ উত্স কোড

আর একটি আকর্ষণীয় টিটিআই কমান্ড হ'ল selector, কনসোলে একটি রিয়েল-টাইম ইন্টারেক্টিভ প্যাটার্ন ম্যাচার যা টিটি ইনপুট বাফার আপডেট করে।

# selector examples
selector -v -x @ <(find . -maxdepth 2 -type d | awk '{print $0"@cd "$0}')
selector -v -x @ <(grep -E -o 'http[^ ]+' fileWithURLS)

দেখুন: নির্বাচক - কনসোল-এ ডায়নামিক অনুসন্ধান


দুঃখজনকভাবে, ttyechoগিথুবটিতে উত্স কোডের লিঙ্কটি নষ্ট হয়ে গেছে বলে মনে হচ্ছে। যাইহোক, এটি এখন পরিবর্তে github.com/osospeed/ttyecho এ উপলব্ধ বলে মনে হচ্ছে ।
উইলসন এফ

7

আপনি যখন একটি লেখার ইস্যু /dev/pts/X( /proc/6350/fd/0, 1এবং 2যে শুধু একটি সিমবলিক লিঙ্ক আছে), কি হবে ঠিক একই জিনিস যখন প্রক্রিয়া ঘটে যে 6350(বা তার শিশুদের একজন, উপযুক্ত forked) আউটপুট কিছু: এটা টার্মিনালে লিখেছেন।

আপনি যদি সেই ডিভাইস ( ) থেকে পড়ার চেষ্টা করেন cat < /dev/pts/X, মজার জিনিসগুলি ঘটবে। আসল শেল শোতে আপনার টাইপ করা জিনিসগুলি দেখতে হবে। (সম্ভবত আপনি টাইপ করা প্রথম নতুন লাইনের পরে কেবলমাত্র - আমি টার্মিনাল প্রোগ্রামটি অনুমান করছি ( xtermবা আপনি যা ব্যবহার করছেন) কিছু লাইন বাফারিং করে, এবং যে 6350শেলটি ব্লক করা হয়েছিল তা readসেই টুকরোটি পায়; হয় শেলটি হতে পারে, বা সম্ভবত না, পরবর্তী পাঠগুলি জিতুন, তবে আমি খুব সম্ভবত এটির উপর সম্পূর্ণ ভুল হতে পারি))

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

আপনি যদি সেই 6530প্রক্রিয়াতে কমান্ডগুলি ইনজেক্ট করতে চান তবে এটি টার্মিনালের মাধ্যমে তা করতে হবে (এটি কোনও এক্স 11 অ্যাপ বা অন্য কিছু হোক)।

প্রস্তাবিত পাঠ: 'টার্মিনাল', 'শেল', 'টিটি' এবং 'কনসোল' এর মধ্যে ঠিক পার্থক্য কী?


1
মজার বিষয় হচ্ছে, পিটিএস থেকে পড়া ( cat /dev/pts/x, আপনার প্রয়োজন নেই <) টার্মিনালের মধ্যে চিঠিগুলি কঠোরভাবে পরিবর্তিত হলাম।
কেভিন

পুনঃনির্দেশ ব্যবহার না করা সম্ভবত খুব বেশি পরিবর্তন হয় না। আমি অনুমানযোগ্য আউটপুট যেভাবেই পাই get
মাদুর

আকর্ষণীয়, লিঙ্কটির জন্য ধন্যবাদ। সুতরাং /proc/6350/fd/0স্টিডিন পিতামাতার একটি অনুরূপ process 6350যা টার্মিনাল। আমার ধারণা এটি উইন্ডোযুক্ত অ্যাপ্লিকেশনগুলির জন্য একই?
rvlander
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.