अगर मैं 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
उद्धृत