यह एक प्रलेखित विशेषता है।
यदि आप एक सिम्कलिन नाम से बैश चलाते हैं sh
, तो बैश sh
कम्पैटिबिलिटी मोड में शुरू हो जाएगा ।
से man bash
:
यदि बैश को नाम श के साथ लगाया जाता है, तो यह पोस मानक के अनुरूप होने के साथ-साथ यथासंभव समीप के ऐतिहासिक संस्करणों के स्टार्टअप व्यवहार की नकल करने की कोशिश करता है। जब एक इंटरेक्टिव लॉगिन शेल, या एक गैर-इंटरेक्टिव शेल इन-एल्गिन विकल्प के रूप में लागू किया जाता है, तो यह पहले उस क्रम में / etc / profile और ~ / .profile से कमांड को पढ़ने और निष्पादित करने का प्रयास करता है। इस व्यवहार को बाधित करने के लिए --noprofile विकल्प का उपयोग किया जा सकता है। जब नाम श के साथ एक इंटरैक्टिव शेल के रूप में आमंत्रित किया जाता है, तो bash वेरिएबल ENV की तलाश करता है, यदि परिभाषित किया गया है, तो इसका मान बढ़ाता है, और विस्तारित मान का उपयोग पढ़ने और निष्पादित करने के लिए फ़ाइल के नाम के रूप में करता है। चूँकि शेल शेल के रूप में किसी अन्य स्टार्टअप फाइल से कमांड को पढ़ने और निष्पादित करने का प्रयास नहीं करता है, इसलिए --rcfile विकल्प का कोई प्रभाव नहीं पड़ता है। नाम श के साथ लगाया गया एक गैर-इंटरैक्टिव शेल किसी भी अन्य स्टार्टअप फ़ाइलों को पढ़ने का प्रयास नहीं करता है। जब श के रूप में आमंत्रित किया जाता है, तो स्टार्टअप फ़ाइलों को पढ़ने के बाद बैश पॉज़िक्स मोड में प्रवेश करता है।
किसी प्रोग्राम को कैसे पता चलता है कि इसे शुरू करने के लिए किस नाम का इस्तेमाल किया गया था?
यदि यह एसी प्रोग्राम है, तो यह निरीक्षण कर सकता है 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