কোনও নতুন পাইপ বা ফাইল তৈরি না করে কীভাবে এক টার্মিনাল থেকে অন্য টার্মিনালে আউটপুট প্রেরণ করা যায়


26

আমি আমার টার্মিনালে (জিনোম টার্মিনাল) প্রায় বোকা বানাচ্ছি। আমি ভাবছিলাম যে নতুন ফাইল বা পাইপ তৈরি না করেই একটি টার্মিনালের আউটপুট প্রেরণ করার উপায় আছে।

উদাহরণস্বরূপ: প্রথম টার্মিনালে আমি চালিত হই lsএবং এর আউটপুট দ্বিতীয় টার্মিনালে প্রদর্শিত হবে (দ্বিতীয়টিতে কোনও কমান্ড ব্যবহার করে বা না করে) প্রদর্শিত হবে


তোমার কী আছে? তুমি কিছু চেষ্টা করেছ? আপনি কিছু উদাহরণ দিতে পারেন?
টাকোমি

@ টাকোমি প্রথম টার্মিনালে আমি চালাচ্ছি lsএবং তার আউটপুট দ্বিতীয় টার্মিনালে প্রদর্শিত হবে (দ্বিতীয়টিতে কোনও কমান্ড ব্যবহার করে বা ছাড়াই)
এডওয়ার্ড টরভাল্ডস

উত্তর:


30

যদি উভয় টার্মিনাল একই ব্যবহারকারীর হয় তবে আপনি আপনার আউটপুট ভার্চুয়াল ডিভাইসে প্রেরণ করতে পারেন যা নির্দিষ্ট টার্মিনালের tty হিসাবে ব্যবহৃত হয়।

সুতরাং আপনি আউটপুটটি ব্যবহার করতে পারেন wযার মধ্যে টিটিওয়াই তথ্য রয়েছে, এবং সরাসরি সেই ডিভাইসে লিখতে পারেন।

ls > /dev/pts/7

(যদি উল্লিখিত ডিভাইসটি wপিটিএস / was ছিল)

অন্য বিকল্পটি হ'ল সেই ডিভাইসের সাথে সংযুক্ত কোনও প্রক্রিয়ার সংখ্যা ব্যবহার করা। আপনার আউটপুট প্রেরণ করুন /proc/<process number>/fd/1

ls > /proc/5555/fd/1

প্রক্রিয়া নম্বরটি ধরে নিলে যে আপনি দেখেছেন যে টার্মিনালটিতে 5555 চলছে।

মনে রাখবেন যে সরাসরি লেখার জন্য অনুমতিপ্রাপ্ত ব্যবহারকারী যদি অন্য টার্মিনালের মালিক একই ব্যবহারকারী হয়


আমি কমান্ডের /dev/pts/7সাথে পাচ্ছি না বা তার মতোই হব না w, তবে দ্বিতীয়
এডওয়ার্ড টরভাল্ডস

2
@edwardtorvalds /proc/XXX/fd/1সাধারণত বেস ডিভাইসের একটি নরম লিঙ্ক। এটি ব্যবহার করার চেষ্টা করুন ls -l /proc/XXXX/fd/1এবং এটি কী নির্দেশ করছে তা দেখুন। wকমান্ডে যা হাজির হয়েছিল তার সাথে কি এর কোনও সম্পর্ক আছে ?
রিয়েলস্কেপটিক

আমি wকমান্ডের সাথে সম্পর্ক /proc/XXX/fd/0রাখছি না আমি wকমান্ডটি সম্পর্কিত করছি/dev/pts/7
এডওয়ার্ড টরভাল্ডস

4
@ অ্যাডওয়ার্টরওয়াল্ডস আমি বলছি যে কমান্ডটি /proc/XXX/fd/1যে কোনও ডিভাইস wপ্রদর্শিত হবে তার সাথে তারা সংযুক্ত রয়েছে বলে মনে করা হয় a ls -lএটির ফলাফল কী ?
রিয়েলস্কেপটিক

টিটিওয়াই তথ্য tty(কেবলমাত্র বর্তমান) বা who(সমস্ত) থেকে আউটপুট পাওয়া যাবে ।
নিক ভলিংকিন

14

আপনি writeকমান্ড ব্যবহার করতে পারেন ।

যেমনটি @ মেলবার্স্লান মন্তব্য করেছেন, লেখার অনুমতি বন্ধ থাকলে প্রথমে সম্পাদন করুন:

 $ mesg y

থেকে man mesg

পছন্দসমূহ

y আপনার টার্মিনালে লেখার অ্যাক্সেসের অনুমতি দিন।

লেখার ব্যবহার:

$ write username tty

যেমন lsঅন্য টার্মিনালে আউটপুট প্রেরণ করুন ।

$ w
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user     :0       :0               08:15   ?xdm?   7:37   0.25s init --user
user     pts/0    :0               08:19    1.00s  0.09s  0.01s w
user     pts/12   :0               08:50   54.00s  0.03s  0.03s bash

$ ls | write username pts/12

আর্ন লিনাক্সে, জিনোম টার্মিনালে, wকমান্ডের আউটপুট হয় edward tty2 19:53 6:05 2:48 23.12s firefoxএবং আমি যদি লিখি তবে আমি ls | write edward tty2একটি বীপ শব্দ ছাড়া আউটপুট পাব না
এডওয়ার্ড টরভাল্ডস

আপনি কি এর edwarddপরিবর্তে টাইপ করেছেন edward?
টাকোমি

এছাড়াও যদি আমি tty5 এ চেষ্টা করে (ctrl + Alt + 5) আমার ত্রুটি হয়you have turned write permission off
এডওয়ার্ড টরভাল্ডস

এই সাইটে ত্রুটিটি টাইপ করা হয়েছিল
এডওয়ার্ড টরভাল্ডস

চেষ্টা mesg y, লক্ষ্য টার্মিন্যালে কমান্ড আগে আপনি নিম্নলিখিত কমান্ডটি প্রয়োগ
MelBurslan

7

আমি একটি অনুরূপ পদ্ধতি খুঁজে পেয়েছি।

প্রথম টার্মিনালে :

 $ tty
 /dev/pts/0
 $ <no need to run any command here, just see the output>

দ্বিতীয় টার্মিনালে :

$ ls > /dev/pts/0

এখন আপনি প্রথম টার্মিনালে আউটপুট পাবেন


1
tail -fপরিবর্তে catদরকারী হতে পারে
টাকোমি

3
@ টাকোমি আসলে আউটপুট পড়তে কোনও কমান্ডের দরকার নেই
এডওয়ার্ড টরভাল্ডস

4

ttyতাদের সনাক্ত করতে প্রতিটি টার্মিনালে কমান্ডটি ব্যবহার করুন:

$ tty
/dev/pts/0

$ tty
/dev/pts/1

এই টিটিওয়াইকে ধরে নিয়ে, প্রথমটির স্টাডআউটকে দ্বিতীয়টিতে পুনর্নির্দেশ করতে, এটি প্রথম টার্মিনালে চালান:

exec 1>/dev/pts/1

দ্রষ্টব্য: এখন প্রতিটি কমান্ড আউটপুট pts / 1 এ প্রদর্শিত হবে

Pts / 0 এর ডিফল্ট আচরণ stdout পুনরুদ্ধার করতে:

exec 1>/dev/pts/0

একটি প্রদর্শনের জন্য এই ভিডিওটি দেখুন ।



0

আপনি টার্মিনালের টিটিওয়াইতে লিখতে পারেন; উদাহরণ স্বরূপ:

টার্মিনাল 1:

$ tty 
ttys000

টার্মিনাল 2:

$ tty
ttys029

$ exec &> >(tee >(cat >&/dev/ttys000))
ls 

আপনি টাইপ করার সাথে সাথে আউটপুট উভয় টার্মিনালগুলিতে রিয়েল-টাইমে প্রদর্শিত হবে।

লিনাক্স এবং ম্যাকোজে কাজ করে। ম্যাকোস টিটিওয়াই পাথ /dev/{number}লিনাক্সের সময় রয়েছে/dev/pts/{number}


নির্বাহটি exec &> >(tee >(cat >&/dev/ttys000))বিদ্যমান নয়, এটি টাইপ করা অসম্ভব হয়ে পড়ে।
এডওয়ার্ড টরভাল্ডস

লিনাক্সে অ্যাডওয়ার্ডটোরওয়াল্ডস ttyএরকম কিছু হবে/dev/pts/0
মিগুয়েল মোটা

হ্যাঁ, এটিই আমি আপনার কোডটি পরীক্ষা করতাম
এডওয়ার্ড টরভাল্ডস

@ এডওয়ার্ডটোরভাল্ডস কোন আদেশের অস্তিত্ব নেই?
মিগুয়েল মোটা

আপনার আদেশ exec &> >(tee >(cat >&/dev/pts/1))। কোনও নিয়ন্ত্রণ কী সমন্বয় (সিটিআরএল + সি) কাজ করে না। আমাকে প্রস্থান করতে টার্মিনালটি মেরে ফেলতে হবে
এডওয়ার্ড টরভাল্ডস

-3

আপনি এটি ব্যবহার করতে পারেন wall:

$ wall "Message here"

আপনি এটি বিশদ বর্ণনা করতে চান। আমি
এডওয়ার্ড টরভাল্ডস

3
আপনি অবশ্যই ব্যবহার করতে চান নাwall ("সমস্ত লিখুন" এর জন্য সংক্ষিপ্ত), যেমন এটি আপনি যে বার্তা প্রেরণ করছেন সেগুলি সহ প্রতিটি লগ-ইন করা টিটিটি সেশনে লেখেন writes পরিবর্তে, ব্যবহার করে writeএকটি নির্দিষ্ট টিটিটি ঘোষণার অনুমতি দেয়।
মন্টি হার্ডার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.