থেকে POSIX মান মধ্যে কমান্ড উপকল্পন উপধারা :
কমান্ড প্রতিস্থাপন কমান্ডের নামের পরিবর্তে একটি কমান্ডের আউটপুট প্রতিস্থাপন করতে দেয়।
কমান্ডের বিকল্পগুলি কমান্ডের আউটপুটটি অস্থায়ী ফাইলটিতে প্রথমে লেখার প্রয়োজন ছাড়াই এবং তারপরে সেই ফাইলটি থেকে পড়ার প্রয়োজন ছাড়াই ব্যবহার করার সহজ উপায়ের অনুমতি দেয়। কমান্ডের আউটপুট একটি এক লাইনের একটি সংক্ষিপ্ত স্ট্রিং হলে এটি করা ভাল।
কিছু লোক কমান্ড থেকে আউটপুট সংগ্রহ করতে কমান্ড বিকল্প ব্যবহার করে এমনকি আউটপুটের পরিমাণটি বহু-লাইন ডকুমেন্ট হতে পারে। কমান্ড সাবস্টিটিউশন ব্যবহার করার জন্য এটি সাধারণত একটি ভাল উপায় নয় । পরিবর্তে, পাইপলাইনগুলি বা অস্থায়ী ফাইলগুলি ব্যবহার করে প্রক্রিয়াজাতকরণের মধ্যবর্তী ডেটা পাস করার স্ট্যান্ডার্ড ইউনিক্স আইডিয়ামটি ব্যবহার করা উচিত।
কমান্ড বিকল্পের উদাহরণ যা আমি ব্যবহার করি:
উদাহরণস্বরূপ, বর্তমান ব্যবহারকারী স্ক্রিপ্টটি মূল হিসাবে চালাচ্ছেন কিনা তা নির্ধারণ করার জন্য:
if [ "$( id -u )" -ne 0 ]; then
echo 'This script requires root privileges, re-run with sudo' >&2
exit 1
fi
$(id -u)
কমান্ড প্রতিকল্পন আউটপুট দ্বারা প্রতিস্থাপিত হবে id -u
, যা বর্তমান ব্যবহারকারীর ইউআইডি (একটি পূর্ণসংখ্যা) ফিরে আসবে।
আরেকটি উদাহরণ. আমি কমিটস সাইন করতে GnuPG ব্যবহার করছি git
। GnuPG সঠিকভাবে কাজ করার GPG_TTY
জন্য, আমার ইন্টারেক্টিভ শেলের প্রারম্ভিককরণ ফাইলটিতে আমার বর্তমান টার্মিনাল ডিভাইসের নাম সেট করা দরকার । আমি এটা দিয়ে করি
export GPG_TTY="$( tty )"
এটি শেল সেশনে বর্তমান টার্মিনাল ডিভাইসটির উপর নির্ভর করে GPG_TTY
এমন কিছু সেট করে /dev/ttyp4
।
আরেকটি উদাহরণ. আমার কাছে একটি স্ক্রিপ্ট রয়েছে যা সোলারিস মেশিনে একটি বিশেষ কেস হিসাবে চলমান আচরণ করতে হবে:
case "$( uname -s )" in
SunOS)
# code specific for Solaris
;;
*)
# code for all other Unix platforms
esac
আরেকটি উদাহরণ. getconf PATH
কমান্ড বর্তমান সিস্টেমের জন্য "ডিফল্ট পথ" ফেরৎ। আমি কিছু পরিস্থিতিতে PATH
ভেরিয়েবলটিকে "বুদ্ধিমান ডিফল্ট" মানটিতে পুনরায় সেট করতে ব্যবহার করি :
PATH="$( getconf PATH )"
date
যা একই জিনিসটি একই সাথে করতে পারেdate +'Today is %a %b %e %H:%M:%S %Z %Y'
এবং কারণ ভেরিয়েবল ডেটা আউটপুট দেওয়ার সময়printf
তার চেয়ে বেশি ভালecho
।