এটি একটি নথিযুক্ত বৈশিষ্ট্য।
আপনি যদি নামের একটি সিমিলিংকের মাধ্যমে বাশ চালান sh
, তবে ব্যাশ sh
সামঞ্জস্যতা মোডে শুরু হবে ।
থেকে man bash
:
যদি শ নামের সাথে বাশটি প্রেরণ করা হয় তবে এটি পসিক্স স্ট্যান্ডার্ডের সাথে সামঞ্জস্য রেখে যতটা সম্ভব নিবিড়ভাবে ofতিহাসিক সংস্করণের শুরুর আচরণটি নকল করার চেষ্টা করে। ইন্টারেক্টিভ লগইন শেল, বা - লগিন বিকল্পের সাথে একটি অ-ইন্টারেক্টিভ শেল হিসাবে আহ্বান করা হলে, প্রথমে সেই আদেশটি / etc / প্রোফাইল এবং ~ /। প্রোফাইল থেকে আদেশগুলি পড়ার এবং সম্পাদন করার চেষ্টা করে। --Noprofile বিকল্পটি এই আচরণটি বাধা দিতে ব্যবহৃত হতে পারে। Sh নামের সাথে একটি ইন্টারেক্টিভ শেল হিসাবে আহ্বান করা হলে, ব্যাশ ভেরিয়েবল ENV সন্ধান করে, সংজ্ঞায়িত হলে এর মান প্রসারিত করে এবং পড়তে এবং সম্পাদন করতে ফাইলের নাম হিসাবে প্রসারিত মানটি ব্যবহার করে। যেহেতু sh হিসাবে আহ্বান করা একটি শেল অন্য কোনও স্টার্টআপ ফাইল থেকে কমান্ডগুলি পড়তে এবং চালিত করার চেষ্টা করে না, --rcfile বিকল্পের কোনও প্রভাব নেই। Sh নামের সাথে যুক্ত একটি অ-ইন্টারেক্টিভ শেল অন্য কোনও স্টার্টআপ ফাইল পড়ার চেষ্টা করে না। Sh হিসাবে আহ্বান করা হলে, ব্যাশ স্টার্টআপ ফাইলগুলি পড়ার পরে পক্সিক্স মোডে প্রবেশ করে।
কোনও প্রোগ্রাম কীভাবে জানতে পারে যে নামটি শুরু করার জন্য ব্যবহৃত হয়েছিল?
এটি যদি এসি প্রোগ্রাম হয় তবে এটি পরিদর্শন করতে পারে argv[0]
। এটি শেল বা পার্ল স্ক্রিপ্ট হলে এটি পরিদর্শন করতে পারে $0
।
উদাহরণ হিসাবে, আসুন এই সহজ শেল স্ক্রিপ্টটি বিবেচনা করুন:
$ cat utc
#!/bin/sh
case "${0##*/}" in
utc) date -u ;;
et) TZ=US/Eastern date ;;
esac
$0
স্ক্রিপ্ট দ্বারা ডেকে আনা সেই নামটি। ${0##*/}
যে নামটি স্ক্রিপ্টটিকে ডেকে আনা হয়েছে এমন কোনও ডিরেক্টরি নামের সাথে ডাকা হয়েছিল।
আসুন এই সিমিলিংক তৈরি করুন:
ln -s utc et
সুতরাং, utc
এবং et
উভয়ই একই নির্বাহযোগ্য চালায় তবে তারা বিভিন্ন ফলাফল সরবরাহ করে। যখন চালানো হয় utc
, এটি সর্বজনীন সময়কে আউটপুট করে। যখন চালানো হয় et
, মার্কিন পূর্ব সময়কে আউটপুট দেয়। উদাহরণ স্বরূপ:
$ utc
Wed Jul 20 18:14:18 UTC 2016
$ et
Wed Jul 20 14:14:20 EDT 2016