2 টিএমপি ফাইলযুক্ত একটি লাইন (আপনি যা চান তা নয়) হ'ল:
foo | bar > file1.txt && baz | quux > file2.txt && diff file1.txt file2.txt
সঙ্গে ব্যাশ , আপনি যদিও চেষ্টা করতে পারেন:
diff <(foo | bar) <(baz | quux)
foo | bar | diff - <(baz | quux) # or only use process substitution once
২ য় সংস্করণটি আরও স্পষ্টভাবে মনে করিয়ে দেবে যে দুটি ইনপুট পরিবর্তে
-- /dev/stdin
বনাম ++ /dev/fd/63
বা কিছু দেখিয়ে কোন ইনপুটটি ছিল ।
এমনকি ফাইল সিস্টেমে কোনও নামযুক্ত পাইপও উপস্থিত হবে না, কমপক্ষে ওএসে যেখানে ব্যাশ ফাইলের নাম ব্যবহার করে প্রক্রিয়া প্রতিস্থাপন /dev/fd/63
প্রয়োগ করতে পারে যা কমান্ডটি খুলতে পারে এবং ইতিমধ্যে খোলা ফাইল বর্ণনাকারীর কাছ থেকে আসলে পড়তে পারে এমন ফাইল ফাইল পেতে পারে যা বাশ সেট করে কমান্ড কার্যকর করার আগে আপ। (যেমন বাশ pipe(2)
কাঁটাচামড়ার আগে ব্যবহার করে , এবং তারপরে এফডি 63৩-তে dup2
আউটপুট থেকে quux
ইনপুট ফাইলের বর্ণনাকারীর দিকে পুনর্নির্দেশের জন্য diff
))
কোনও "যাদুকরী" /dev/fd
বা সিস্টেমে /proc/self/fd
বাশ প্রক্রিয়া প্রতিস্থাপন বাস্তবায়নের জন্য নামযুক্ত পাইপ ব্যবহার করতে পারে তবে অস্থায়ী ফাইলগুলির মতো এটি কমপক্ষে সেগুলি নিজেই পরিচালনা করবে এবং আপনার ডেটা ফাইল সিস্টেমে লিখিত হবে না।
আপনি বাশ কীভাবে ফাইলনামটি echo <(true)
পড়ার পরিবর্তে ফাইলের নাম মুদ্রণের সাথে বিকল্প বিকল্প প্রয়োগ করে তা পরীক্ষা করতে পারেন । এটি /dev/fd/63
একটি সাধারণ লিনাক্স সিস্টেমে মুদ্রণ করে। বা সিস্টেম ব্যাশকে ঠিক কী ব্যবহার করে সে সম্পর্কে আরও তথ্যের জন্য, লিনাক্স সিস্টেমে এই কমান্ডটি ফাইল এবং ফাইল-বিবরণকারী সিস্টেম কলগুলি সনাক্ত করবে
strace -f -efile,desc,clone,execve bash -c '/bin/true | diff -u - <(/bin/true)'
বাশ ছাড়া, আপনি একটি নামযুক্ত পাইপ তৈরি করতে পারেন । ব্যবহার করুন -
জানাতে diff
stdin থেকে এক ইনপুট পড়তে, এবং অন্যান্য নামকরণ নল ব্যবহার করার জন্য:
mkfifo file1_pipe.txt
foo|bar > file1_pipe.txt && baz | quux | diff file1_pipe.txt - && rm file1_pipe.txt
মনে রাখবেন আপনি যা করতে পারেন শুধুমাত্র নল এক আউটপুট করতে একাধিক ইনপুট টী বর্ণের নাম আদেশের সঙ্গে:
ls *.txt | tee /dev/tty txtlist.txt
উপরের কমান্ডটি টার্মিনালে ls * .txt এর আউটপুট প্রদর্শন করে এবং এটি পাঠ্য ফাইল txtlist.txt এ আউটপুট দেয়।
তবে প্রক্রিয়া প্রতিস্থাপনের সাথে আপনি tee
একই ডেটাটিকে একাধিক পাইপলাইনে ফিড করতে ব্যবহার করতে পারেন :
cat *.txt | tee >(foo | bar > result1.txt) >(baz | quux > result2.txt) | foobar
mkfifo a; cmd >a& cmd2|diff a -; rm a