বর্তমান অনুগ্রহ বিজ্ঞপ্তিতে প্রশ্ন:
সাধারণ উদাহরণটি খুব জটিল। কেউ দয়া করে নীচের উদাহরণটি কীভাবে প্রয়োগ করবেন তা ব্যাখ্যা করতে পারেন?diff <(cat "$2" | xz -d) <(cat "$1" | xz -d)
এখানে একটি উত্তর আছে বলে মনে হচ্ছে ।
গিলসের উত্তরে যেমন দেখানো হয়েছে , সাধারণ ধারণাটি হ'ল "প্রযোজক" কমান্ডের আউটপুট নতুন ডিভাইস ফাইলগুলিতে 1 পাইপলাইনের বিভিন্ন পর্যায়ে প্রেরণ করে তাদের "ভোক্তা" কমান্ডগুলিতে উপলব্ধ করা হয়, যা সম্ভবত ফাইলের নামগুলি যুক্তি হিসাবে গ্রহণ করতে পারে ( ধরে নিচ্ছেন যে আপনার সিস্টেম আপনাকে ফাইল বর্ণনাকারীদের অ্যাক্সেস দেয় /dev/fd/X
)।
আপনি যা সন্ধান করছেন তা অর্জনের সহজ উপায় সম্ভবত:
xz -cd file1.xz | { xz -cd file2.xz | diff /dev/fd/3 -; } 3<&0
( পঠনযোগ্যতার জন্য file1.xz
জায়গায় "$1"
এবং এর xz -cd
পরিবর্তে cat ... | xz -d
একটি একক আদেশ যথেষ্ট) ব্যবহার করা হচ্ছে।
প্রথম "প্রযোজক" কমান্ডের আউটপুট, xz -cd file1.xz
একটি যৌগিক কমান্ডে পাইপ করা হয় ( {...}
); তবে পরবর্তী কমান্ডের স্ট্যান্ডার্ড ইনপুট হিসাবে তাত্ক্ষণিকভাবে গ্রাস করার পরিবর্তে, এটি বিবরণী ফাইল করাতে নকল করা 3
হয় এবং এইভাবে কমপઉન્ડ কমান্ডের অভ্যন্তরের সমস্ত কিছুর জন্য অ্যাক্সেসযোগ্য হয়ে যায় /dev/fd/3
। দ্বিতীয় "প্রযোজক" কমান্ডের আউটপুট xz -cd file2.xz
, যা তার স্ট্যান্ডার্ড ইনপুট বা ফাইল বর্ণনাকারীর কোনও কিছুই গ্রাস করে না 3
, তারপরে "কনজিউমার" কমান্ডে পাইপ করা হয় diff
, যা তার স্ট্যান্ডার্ড ইনপুট থেকে এবং পড়তে পারে /dev/fd/3
।
পাইপিং এবং ফাইল বর্ণনাকারীর সদৃশটি অনেকগুলি "প্রযোজক" কমান্ডের প্রয়োজন হিসাবে ডিভাইস ফাইল সরবরাহ করার জন্য যুক্ত করা যেতে পারে যেমন:
xz -cd file1.xz | { xz -cd file2.xz | { diff /dev/fd/3 /dev/fd/4; } 4<&0; } 3<&0
যদিও এটি আপনার নির্দিষ্ট প্রশ্নের প্রসঙ্গে অপ্রাসঙ্গিক হতে পারে, তবে এটি লক্ষণীয় যে:
cmd1 <(cmd2) <(cmd3)
, cmd2 | { cmd3 | { cmd1 /dev/fd/3 /dev/fd/4; } 4<&0; } 3<&0
এবং ( cmd2 | ( cmd3 | ( cmd1 /dev/fd/3 /dev/fd/4 ) 4<&0 ) 3<&0 )
প্রাথমিক সম্পাদন পরিবেশে বিভিন্ন সম্ভাব্য প্রভাব রয়েছে।
কি ঘটবে বিপরীত cmd1 <(cmd2) <(cmd3)
, cmd3
এবং cmd1
মধ্যে cmd2 | { cmd3 | { cmd1 /dev/fd/3 /dev/fd/4; } 4<&0; } 3<&0
ব্যবহারকারীর কাছ থেকে কোনো ইনপুট পড়তে সক্ষম হবেন না। এর জন্য আরও ফাইল বর্ণনাকারীর প্রয়োজন হবে। উদাহরণস্বরূপ, মেলে
diff <(echo foo) <(read var; echo "$var")
আপনার মতো কিছু দরকার হবে
{ echo foo | { read var 0<&9; echo "$var" | diff /dev/fd/3 -; } 3<&0; } 9<&0
1 এর মধ্যে আরও কিছু ইউএন্ডএল , যেমন বোঝা / ডিভ এবং এর সাবডিয়ার এবং ফাইলগুলিতে পাওয়া যাবে ।