এটি লক্ষ করা উচিত যে প্রক্রিয়া প্রতিস্থাপনটি ফর্মের মধ্যে সীমাবদ্ধ নয় <(command)
, যা command
ফাইল হিসাবে আউটপুট ব্যবহার করে । এটি এমন ফর্ম হতে পারে >(command)
যা কোনও ফাইলকেও ইনপুট হিসাবে ফিড করে command
। @ এনজোটিবের উত্তরে বাশ ম্যানুয়ালের উদ্ধৃতিতে এটি উল্লেখ করা হয়েছে।
জন্য date | cat
উপরোক্ত উদাহরণে, একটি কমান্ড ফর্ম প্রক্রিয়া প্রতিকল্পন ব্যবহার করে >(command)
অর্জন করা একই প্রভাব হবে,
date > >(cat)
নোট করুন যে >
আগে >(cat)
প্রয়োজনীয়। echo
@ কালেবের উত্তর হিসাবে এটি আবার পরিষ্কারভাবে চিত্রিত করা যেতে পারে ।
$ echo >(cat)
/dev/fd/63
সুতরাং, অতিরিক্ত ছাড়া >
, স্টাডারকে একটি বার্তা প্রিন্ট date >(cat)
করার মতোই date /dev/fd/63
হবে।
মনে করুন আপনার কাছে এমন একটি প্রোগ্রাম রয়েছে যা কেবলমাত্র পরামিতি হিসাবে ফাইলের নাম নেয় এবং প্রক্রিয়া করে না stdin
বা stdout
। এটি psub.sh
চিত্রিত করার জন্য আমি ওভারসিম্প্লিফাইড স্ক্রিপ্টটি ব্যবহার করব । বিষয়বস্তু psub.sh
হয়
#!/bin/bash
[ -e "$1" -a -e "$2" ] && awk '{print $1}' "$1" > "$2"
মূলত, এটা পরীক্ষা যে তার আর্গুমেন্ট উভয় ফাইল (অগত্যা নিয়মিত না ফাইল) এবং এই ক্ষেত্রে যদি, প্রতিটি লাইনের প্রথম ক্ষেত্রের লিখতে "$1"
করার "$2"
awk ব্যবহার করে। তারপরে, একটি কমান্ড যা এ পর্যন্ত উল্লেখ করা সমস্ত সংযুক্ত করে,
./psub.sh <(printf "a a\nc c\nb b") >(sort)
এটি মুদ্রণ করবে
a
b
c
এবং এর সমতুল্য
printf "a a\nc c\nb b" | awk '{print $1}' | sort
তবে নিম্নলিখিতগুলি কাজ করবে না এবং আমাদের এখানে প্রক্রিয়া বিকল্প ব্যবহার করতে হবে,
printf "a a\nc c\nb b" | ./psub.sh | sort
বা এর সমতুল্য ফর্ম
printf "a a\nc c\nb b" | ./psub.sh /dev/stdin /dev/stdout | sort
যদি উপরে বর্ণিত বিষয়গুলি ছাড়াও যদি ./psub.sh
এটিও পড়ে থাকে stdin
তবে এ জাতীয় সমতুল্য ফর্মটি বিদ্যমান নেই এবং সেই ক্ষেত্রে প্রক্রিয়া প্রতিস্থাপনের পরিবর্তে আমরা ব্যবহার করতে পারি এমন কিছুই নেই (অবশ্যই আপনি একটি নামী পাইপ বা টেম্প ফাইলও ব্যবহার করতে পারেন, তবে এটি অন্যটি গল্প).