পূর্বে আমি source
এই জাতীয় কমান্ড ব্যবহার করতাম :
source file_name
তবে আমি যা করার চেষ্টা করছি তা হ'ল:
echo something | source
যা কাজ করে না।
পূর্বে আমি source
এই জাতীয় কমান্ড ব্যবহার করতাম :
source file_name
তবে আমি যা করার চেষ্টা করছি তা হ'ল:
echo something | source
যা কাজ করে না।
উত্তর:
যেহেতু source
(বা .
) কোনও ফাইল আর্গুমেন্ট হিসাবে গ্রহণ করে, আপনি চেষ্টা করতে পারেন:
source <(echo something)
আপনার উত্স কমান্ডের জন্য একটি ফাইল আর্গুমেন্ট প্রয়োজন। প্রক্রিয়া প্রতিস্থাপনের সাথে আপনি কয়েকটি শেলের মধ্যে এটি পেতে পারেন এবং এটি কারণ একইভাবে শেলটি প্রতিস্থাপন করা হয় ...
arg=$(echo hi)
... echo
সাবস্কেলের আউটপুট সহ কমান্ড-লাইনের কিছুটা, প্রক্রিয়া প্রতিস্থাপনের ক্ষেত্রে এটি সাব-শেলটিকে একটি নামযুক্ত ফাইলের সাথে প্রতিস্থাপন করে - সাধারণত /dev/fd/62
বা কিছু - একটি ফাইল-বর্ণনাকারীর কোনও লিঙ্ক। একটি পাইপ দিয়ে ফাইল বর্ণনাকারী 0 তাই ...
echo 'echo hi' | . /dev/fd/0
... /dev/stdin
বা কেস হিসাবে যাই হোক না কেন, কোনও লিনাক্স সিস্টেমে - এবং আরও অনেকের জন্য ঠিক কাজ করা উচিত। আপনি এখানে-নথিগুলি একইভাবে ব্যবহার করতে পারেন:
. /dev/fd/3 3<<HI
$(echo 'echo hi')
HI
আপনার শেল যেভাবে প্রক্রিয়া প্রতিস্থাপন পরিচালনা করে তা আপনি যাচাই করতে পারেন:
(set -x; readlink <(:))
... যা প্রিন্ট করে (ইন bash
) :
+ set +x
+ readlink /dev/fd/63
++ :
pipe:[2212581]
... এবং তাই আমরা দেখতে পাচ্ছি যে শেলটি প্রতিস্থাপনটি করছে এবং readlink
একটি অ্যানয়মাস পাইপ থেকে এটি পড়ছে যা এটি ফাইল-বর্ণনাকারী 63 এ খোলে।