একটি প্রোগ্রামের আউটপুটটিকে অন্য দুটি প্রোগ্রামে পাইপ দেওয়ার কোনও উপায় আছে কি?


28

দুঃখিত যদি এটি একটি নির্বোধ প্রশ্ন তবে আমি এই জাতীয় কিছু অর্জন করার চেষ্টা করছি তবে এক লাইনে:

$ prog1 | prog2
$ prog1 | prog3

সুতরাং, আমি মূলত প্রোগ 1 সম্পাদন করতে চাই এবং আউটপুটটিকে প্রগ 2 এবং প্রগ 3 এ পৃথকভাবে চালিত করতে চাই (চেইন পাইপ নয়)। প্রথমে, আমি টি ব্যবহার করার চেষ্টা করছিলাম তবে এটি সঠিক মনে হয়নি কারণ এটি কোনও ফাইলে আউটপুট ডাম্প করছে (যা আমি চাই তা নয়)।

$ prog1 | tee prog2 | prog3 # doesn't work - creates file "prog2"

এক পর্যায়ে, আমি সম্ভবত আউটপুট দুটি আরও বেশি প্রোগ্রামে পাইপিংয়ের ক্ষেত্রে এটি প্রসারিত করতে চাই তবে আমি এখনই সহজ শুরু করছি।

$ prog1 | prog2
$ prog1 | prog3
$ prog1 | prog4
...

আমি মনে করি zsh এটি করতে পারে।
কিথ

উত্তর:


28

প্রক্রিয়া প্রতিস্থাপন।

... | tee >(prog2) | ...

1
আইআইআরসি যা বাশ এক্সটেনশান এবং মানক পসিক্স এসএইচ পাওয়া যায় না।
সাইমন রিখটার

6
@ সিমোনরিখটার এটি একটি ksh93 এক্সটেনশান, এটি ব্যাশ এবং জেডএসএতেও পাওয়া যায়।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

16

Ignacio জবাব অনুরূপ, আপনি ব্যবহার করে একটি অস্থায়ী নাম পাইপ ব্যবহার করতে পারেন mkfifo(1)

mkfifo /tmp/teedoff.$$; cmd | tee /tmp/teedoff.$$ | prog2 & sleep 1; prog3 < /tmp/teedoff.$$; rm /tmp/teedoff.$$

এটি কিছুটা ভার্বোজ, তবে এটি এমন সিস্টেমে কাজ করবে যেগুলির মতো প্রক্রিয়া বদলি নেই dash। যে sleep 1কোনও জাতির শর্তাদি পরিচালনা করতে হয়।


6

একটি ছোট ইউটিলিটি পিটি রয়েছে যা কাজটি করে:

prog1 | ptee 2 3 4 2> >(prog2) 3> >(prog3) 4> >(prog4)

ফাইলগুলিতে লেখার পরিবর্তে, পিটিআই সমস্ত এফডিএসকে লিখিত লিখুন যা কমান্ড লাইনে দেওয়া আছে।

ptee অংশ pipexec


4

আপনার কোনও বাশিজম বা বিশেষ ফাইল বা এর কোনও দরকার নেই - যাইহোক লিনাক্সে নয়:

% { prog1 | tee /dev/fd/3 | prog2 >&2 ; } 3>&1 | prog3 

{ { printf %s\\t%s\\t%s\\n \
    "this uneven argument list" \
    "will wrap around" to \
    "different combinations" \
    "for each line." "Ill pick out" \
    "a few words" "and grep for them from" \
    "the same stream." | 
 tee /dev/fd/3 /dev/fd/4 | 
 grep combination >&2 ; } 3>&1 |
 grep pick >&2 ; } 4>&1 | 
 grep line

different combinations  for each *line.*  Ill pick out
different combinations  for each line.  Ill *pick* out
different *combinations*  for each line.  Ill pick out

আমি grepএকই ফলাফল থেকে তারা কেবল তিনটি ফলাফলই ছিল না তা দেখানোর জন্য আমার কাছে হাইলাইট করা ফলাফলগুলি তারাটিতে ফেলেছিল তারা পৃথক grepপ্রক্রিয়া ম্যাচের ফলাফলও ।

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