কমান্ডের আউটপুট একাধিক কমান্ডে পুনর্নির্দেশ করা সম্ভব?


21

আমি যতদূর জানি, আমি স্ট্যান্ডার্ড আউটপুটটিকে স্ক্রিনে এবং আরও ফাইলগুলিতে বিভক্ত করতে টি কমান্ডটি ব্যবহার করতে পারি:

command -option1 -option2 argument | tee file1 file2 file3 

টি ব্যবহার করে ফাইলগুলির পরিবর্তে আউটপুটটি কমান্ডগুলিতে পুনর্নির্দেশ করা সম্ভব হয়, যাতে আমি তাত্ত্বিকভাবে কমান্ডগুলির একটি শৃঙ্খলা তৈরি করতে পারি?


3
"আউটপুট সিগন্যাল" দ্বারা আপনি কী বোঝাতে চান তা ব্যাখ্যা করুন এবং "কমান্ডের নেটওয়ার্ক" তৈরি করে আপনি কী বোঝাতে চাইছেন তা বর্ণনা করুন।
জেনিস

লিনাক্সে প্রতিটি কমান্ডের একটি ইনপুট এবং দুটি আউটপুট থাকে। এগুলি 0 (ইনপুট জন্য), 1 (আউটপুট জন্য) এবং 2 (ত্রুটি আউটপুট জন্য) দিয়ে লেবেলযুক্ত। আমি 1 এর কথা ভাবছিলাম যখন আমি "আউটপুট সিগন্যাল" বলেছিলাম কারণ আমি পড়েছিলাম যে টি কমান্ডটি কেবলমাত্র আউটপুট লেবেল 1 বিভক্ত করে ফেলেছিল যখন আমি "কমান্ডের নেটওয়ার্ক" বলেছিলাম তখন আমি খুব প্রযুক্তিগত ছিলাম না, আমি নিশ্চিত নই যে কীভাবে নেটওয়ার্কটি সঠিকভাবে সংজ্ঞায়িত করা হয়েছে একটি গাণিতিক দৃষ্টিকোণ, তবে আমি কেবল কমান্ডের গাছের কথা ভাবছিলাম টাইপোলজিকালি বলার জন্য, যাতে কিছু কমান্ড একাধিক শিশু কমান্ডের পিতা-মাতা হতে পারে।
আব্দুল আল হাজরেড 0 '17

স্পষ্ট করার জন্য ধন্যবাদ। ইউনিক্সের নির্দিষ্ট অর্থ রয়েছে বলে দয়া করে সংকেত শব্দটি ব্যবহার করবেন না এবং এই প্রসঙ্গে শব্দটি খুব বিভ্রান্তিকর ছিল। আবার ধন্যবাদ.
জেনিস

ইউএনআইএক্স এবং লিনাক্সে এই মূল ধারণার বিশেষ অর্থ জানতে কমান্ড-লাইনে ম্যান-কে সিগন্যাল প্রবেশ করান। ম্যান কিল শুরু করার জন্য একটি ভাল পৃষ্ঠা হবে।
রব

এছাড়াও, অনেকে স্ট্যান্ডিন স্টডআউট এবং স্ট্ডারকে ইনপুট বা আউটপুট 'স্ট্রিম' হিসাবে উল্লেখ করে। তথ্যের ছোট ছোট নদীর মতো তাই একটি স্ট্রিম। সম্মিলিতভাবে বর্ণনা করার জন্য কোনও শব্দের জন্য আপনি আঁকড়ে ধরেছিলেন তবে সংকেত কেবল ভুল শব্দ the
রব

উত্তর:


25

আপনি কমান্ড লাইনে নামক পাইপ ( http://linux.die.net/man/1/mkfifo ) ব্যবহার করতে পারেন এবং নামক পাইপগুলিতে teeকমান্ডগুলি পড়তে পারেন।

mkfifo /tmp/data0 /tmp/data1 /tmp/data2
cmd0 < /tmp/data0 & cmd1 < /tmp/data1 & cmd2 < /tmp/data2 &
command -option1 -option2 argument | tee /tmp/data0 /tmp/data1 /tmp/data2

commandশেষ হয়ে গেলে , teeনামযুক্ত পাইপগুলি বন্ধ করে দেবে, যা প্রতিটি ইওএফ (0 বাইটের পঠিত) সিগন্যাল দেয় /tmp/dataNযা সাধারণত cmdNপ্রক্রিয়াগুলি শেষ করে দেয় । বাস্তব উদাহরণ:

$ mkfifo /tmp/data0 /tmp/data1 /tmp/data2
$ wc -l < /tmp/data0 & wc -w < /tmp/data1 & wc -c < /tmp/data2 &
$ tee /tmp/data0 /tmp/data1 /tmp/data2 < /etc/passwd >/dev/null
$ 61
1974
37

ব্যাকগ্রাউন্ড প্রক্রিয়াগুলির কারণে, শেল প্রোগ্রাম আউটপুট দেওয়ার আগে একটি প্রম্পট ফিরিয়ে দেয়। তিনটি দৃষ্টান্ত wcসাধারণভাবে সমাপ্ত হয়।


1
ইন ব্যাশ , আপনি মাধ্যমে টাইপিং নিরাপদ অনেক করতে পারেন /tmp/data/{0,1,2}। তারপরে আবার, mkfifo
ব্যাশে

2
/ ডিএমপি / ডেটা0 কে / টিএমপি / ডেটা0 এ পরিবর্তন করতে পারে। এছাড়াও, শেল-অজ্ঞাত পদ্ধতিতে প্রশ্নের উত্তর দেওয়ার জন্য ধন্যবাদ। এটা অনুমান করার চেয়ে আরও বেশি সহায়ক যে সবাই ব্যাশ ব্যবহার করছে।
মিনিটে অ্যাবনেট

15

যদি আমি সঠিকভাবে বুঝতে, আপনি সমতুল্য খুঁজছেন tee file1 file2 file3, বরং তিনটি ফাইল একই ডেটা লিখুন চেয়ে file1, file2এবং file3, আপনি নল তিন কমান্ড একই তথ্য চান cmd1, cmd2এবং cmd3, অর্থাত্

… | ??? cmd1 cmd2 cmd3

এর সমতুল্য হওয়া উচিত

… | cmd1 &
… | cmd2 &
… | cmd3 &

কেবলমাত্র একবারেই মৃত্যুদন্ড কার্যকর করা হবে।

এটি করার দুটি উপায় আছে।

Ksh93, ব্যাশ এবং zsh সমর্থন প্রক্রিয়া বিকল্পের বিকল্প । এটি পাইপের একটি সাধারণীকরণ যা কমান্ডের যুক্তিটিকে একটি ফাইল হতে দেয় যা যখন লিখিত হয় তখন কোনও কমান্ডের সাথে ইনপুট হিসাবে ডেটা প্রেরণ করে (এমন কোনও ইনপুট ভেরিয়েন্টও রয়েছে যা পড়ার পরে কমান্ড দ্বারা ডেটা আউটপুট গ্রহণ করে) । এটাই,

echo hello | tee >(cmd1)

কপি করে প্রিন্ট helloমানক আউটপুটে এবং এ ছাড়াও রান cmd1দিয়ে helloইনপুট হিসাবে।

সুতরাং উদাহরণস্বরূপ, যদি আপনি ইনপুট প্রতিলিপি করতে চান somecommandএবং এটি উভয় পাস cmd1এবং cmd2, আপনি ব্যবহার করতে পারেন

somecommand | tee >(cmd1) | cmd2

যদি আপনার শেল প্রক্রিয়া বিকল্পটি সমর্থন করে না, আপনি পরিবর্তে নামক পাইপ ব্যবহার করতে পারেন। কীভাবে এটি কাজ করে তার জন্য আর্জের উত্তর দেখুন । নামযুক্ত পাইপগুলি প্রক্রিয়া প্রতিস্থাপনের চেয়ে কম সুবিধাজনক কারণ আপনাকে সেগুলি তৈরি করতে হবে এবং সেগুলি মুছতে হবে এবং ম্যানুয়ালি প্রক্রিয়াগুলি শুরু করতে এবং সিঙ্ক্রোনাইজ করতে হবে। তাদের পুরোপুরি পোর্টেবল হওয়ার সুবিধা রয়েছে, যেখানে সমস্ত শেল প্রক্রিয়া বিকল্পগুলি সমর্থন করে না। এগুলি প্রক্রিয়া প্রতিস্থাপনের জন্য ব্যতীত অন্য পরিস্থিতিতেও ব্যবহার করা যেতে পারে।

ফণা অধীনে, কিছু সিস্টেমে, প্রক্রিয়া বিকল্পের নাম অন্তর্ভুক্ত পাইপ ব্যবহার করে। বেশিরভাগ সিস্টেমে এটি ফাইল বর্ণনাকারীদের উপস্থাপনকারী নামযুক্ত ফাইলগুলির উপর নির্ভর করে ।


5
আরও দেখুন peeথেকে moreutils
স্টাফেন চেজেলাস 8'15

নোট করুন যে প্রক্রিয়া প্রতিস্থাপনটি ksh88 দ্বারা চালু করা হয়েছিল।
স্টাফেন চেজেলাস


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