बाश के सामने (-)


14

अगर मैं OS X (10.6.4) टर्मिनल में अपने बैश शेल की जांच करता हूं, जैसे कि टाइप करके echo $0, मेरे शेल के सामने एक डैश है, जैसे -bash:। इस डैश का क्या मतलब है?

जवाबों:


14

इसका मतलब है कि 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)उपयोगकर्ता के घर निर्देशिका में प्रवेश से रोकता है। । डिफ़ॉल्ट हाइफ़न जोड़ना है (यह एक लॉगिन सत्र है)।


महान जवाब, स्पष्टीकरण के लिए धन्यवाद और manउद्धृत
marshall.ward

1
मैं ubuntu का उपयोग कर रहा हूं, और मुझे अलग-अलग व्यवहार दिखाई देते हैं echo $0: यदि मैं echo $0टर्मिनल में टाइप करता हूं ctrl + alt + f1, तो इसका परिणाम है -bash; लेकिन अगर मैं इसे टर्मियनल इनवैलिड टाइप करता हूं ctrl + alt + t, तो परिणाम bash(कोई अग्रणी डैश) नहीं है। क्या आप बता सकते हैं कि क्यों?
फ्रोजन फ्लेम

@ फ्रोजन-फ्लेम एक लॉगिन शेल है, दूसरा नहीं है। ध्यान दें कि ओएस एक्स टर्मिनल और लिनक्स टर्मिनलों का उस संबंध में अलग व्यवहार है।
डैनियल बेक

@DanielBeck यह एक प्रमाण नहीं है कि दूसरा एक लॉगिन शेल नहीं है। जब बैश को --loginतर्क के साथ लॉन्च किया जाता है, तो यह इसे बदलता नहीं है argv[0], लेकिन लॉगिन शेल के रूप में कार्य करता है।
रुस्लान

@Ruslan ज़रूर, सिद्धांत रूप में यह अभी भी एक लॉगिन शेल हो सकता है। लेकिन ऐसा नहीं है। (कम से कम मैं बहुत अगर यह था हैरानी होगी।)
डैनियल बेक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.