अगर मैं OS X (10.6.4) टर्मिनल में अपने बैश शेल की जांच करता हूं, जैसे कि टाइप करके echo $0, मेरे शेल के सामने एक डैश है, जैसे -bash:। इस डैश का क्या मतलब है?
अगर मैं OS X (10.6.4) टर्मिनल में अपने बैश शेल की जांच करता हूं, जैसे कि टाइप करके echo $0, मेरे शेल के सामने एक डैश है, जैसे -bash:। इस डैश का क्या मतलब है?
जवाबों:
इसका मतलब है कि bashएक लॉगिन शेल के रूप में लगाया जाता है।
man bash कहते हैं:
एक लॉगिन शेल वह है जिसका तर्क शून्य का पहला चरित्र है
-, या एक--loginविकल्प के साथ शुरू हुआ ।जब बैश को एक इंटरेक्टिव लॉगिन शेल के रूप में या
--loginविकल्प के साथ एक गैर-इंटरैक्टिव शेल के रूप में लागू किया जाता है , तो यह पहले फ़ाइल से कमांड को पढ़ता है और निष्पादित करता है/etc/profile, यदि वह फ़ाइल मौजूद है। उस फ़ाइल को पढ़ने के बाद, यह उस क्रम में , और , के लिए लग रहा है~/.bash_profile,~/.bash_loginऔर~/.profileपहले से मौजूद आदेशों को पढ़ता है और निष्पादित करता है और पठनीय है।--noprofileविकल्प इस्तेमाल किया जा सकता है जब खोल इस व्यवहार को बाधित करने के लिए शुरू कर दिया है।जब कोई लॉगिन शेल बाहर निकलता है, तो bash पढ़ता है और फ़ाइल से कमांड निष्पादित करता है
~/.bash_logout, अगर यह मौजूद है।
आप login -pfअपने psआउटपुट में पाएंगे , जो डिफ़ॉल्ट रूप से एक लॉगिन शेल शुरू करता है।
दौड़ने की कोशिश करें login -pfऔर login -pflअंतर देखें। man loginअंतर का वर्णन करता है:
-lलॉगिन द्वारा निष्पादित प्रोग्राम को बताता है कि यह एक लॉगिन सत्र नहीं है (सम्मेलन द्वारा, लॉगिन सत्र को प्रोग्राम के लिए हाइफ़न के पहले चरित्र के रूप में संकेत दिया जाता हैargv[0]; यह विकल्प अक्षम करता है), और इसेchdir(2)उपयोगकर्ता के घर निर्देशिका में प्रवेश से रोकता है। । डिफ़ॉल्ट हाइफ़न जोड़ना है (यह एक लॉगिन सत्र है)।
echo $0: यदि मैं echo $0टर्मिनल में टाइप करता हूं ctrl + alt + f1, तो इसका परिणाम है -bash; लेकिन अगर मैं इसे टर्मियनल इनवैलिड टाइप करता हूं ctrl + alt + t, तो परिणाम bash(कोई अग्रणी डैश) नहीं है। क्या आप बता सकते हैं कि क्यों?
--loginतर्क के साथ लॉन्च किया जाता है, तो यह इसे बदलता नहीं है argv[0], लेकिन लॉगिन शेल के रूप में कार्य करता है।
manउद्धृत