विचार यह है कि एक उपयोगकर्ता के पास (अधिकतम) प्रति होस्ट में एक लॉगिन शेल होना चाहिए। (शायद मुझे कहना चाहिए, प्रति टर्मिनल प्रति होस्ट में एक लॉगिन शेल - यदि आप एक साथ कई टर्मिनलों के माध्यम से होस्ट में लॉग इन होते हैं, तो आप कई लॉगिन शेल होने की उम्मीद करेंगे।) यह आम तौर पर (हमेशा?) पहला शेल होगा। लॉग इन करने पर (इसलिए नाम)। इसलिए, यह योजना आपको उन कार्यों को निर्दिष्ट करने की अनुमति देती है, जो आप केवल एक बार लॉगिन और उन चीजों के लिए करना चाहते हैं जो आप हर बार जब आप एक नया (इंटरैक्टिव) शेल शुरू करना चाहते हैं।
आम तौर पर, लॉगिंग के बाद आपके द्वारा चलाया जाने वाला हर दूसरा शेल लॉगिन शेल का वंशज (एक बच्चे का बच्चा ...) होगा, और इसलिए लॉगिन शेल से कई सेटिंग्स (पर्यावरण चर umask
, आदि) विरासत में मिलेंगे । और, तदनुसार, विचार है कि लॉगिन प्रारंभ फ़ाइलें (है .login
, .profile
आदि) सेटिंग्स कि दाय हैं स्थापित करना चाहिए, और .bashrc
(या कोई अन्य आप का उपयोग जो कुछ भी) जो कि (नहीं हैं संभाल set
, shopt
, गैर निर्यात खोल चर , आदि।)
एक और धारणा यह है कि लॉगिन आरंभीकरण फ़ाइलें (और केवल वे) को "भारी उठाने", यानी संसाधन-गहन कार्यों को करना चाहिए। उदाहरण के लिए, आप चाहते हैं कि जब भी आप लॉग इन करें (लेकिन उनमें से केवल एक प्रति (उदाहरण)) हो, तो आप पृष्ठभूमि में चलने वाली कुछ प्रक्रियाएँ कर सकते हैं। जब आप लॉगिन करते हैं तो आप कुछ स्थिति की जानकारी (जैसे, df
या who
) प्रदर्शित कर सकते हैं, लेकिन हर बार जब आप एक नया इंटरैक्टिव शेल शुरू करते हैं। खासकर यदि आपके पास एक इंटरैक्टिव हैकार्यक्रम / संवाद (यानी, जो आपसे इनपुट मांगता है) जिसे आप हर बार लॉगिन करते समय चलाना चाहते हैं, आप शायद यह नहीं चाहते कि हर बार जब आप एक नया शेल शुरू करें। एक चरम उदाहरण के रूप में, बीस साल पहले सोलारिस ने आपको एक एकल, गैर-ग्राफिकल, गैर-विंडो शेल में लॉग इन किया था। (मुझे विश्वास है कि यह तब से बदल गया है।) यह का काम था .login
या .profile
(या जो भी) जैसी कमांड के साथ, विंडोइंग प्रणाली शुरू करने के लिए startx
। (यह आंशिक रूप से उपयोगी था क्योंकि कई विंडोिंग सिस्टम उपलब्ध थे। अलग-अलग उपयोगकर्ताओं की अलग-अलग प्राथमिकताएँ थीं। कुछ उपयोगकर्ताओं ने विभिन्न परिस्थितियों में अलग-अलग प्रणालियों का उपयोग किया, और हमारे पास एक संवाद था .profile
जिसमें पूछा गया था कि "आप किस विंडो सिस्टम का उपयोग करना चाहते हैं?" जाहिर है, आप नहीं चाहेंगे कि हर बार जब आप एक नई विंडो खोलें या टाइप करेंsh
।
यह उम्र हो गई है क्योंकि मैंने bash
किनारे के मामलों को छोड़कर कुछ भी इस्तेमाल किया है । (उदाहरण के लिए, मैं स्क्रिप्ट्स के साथ लिखता हूं #!/bin/sh
, इसलिए कुछ सिस्टम पर, मेरी स्क्रिप्ट्स चलती हैं dash
, और दूसरों पर वे bash
पॉसिक्स मोड में चलते हैं । साल में कई बार मैं दौड़ता हूं csh
/ tcsh
कुछ मिनटों के लिए यह देखता हूं कि यह कैसे कुछ संभालता है, या। एक प्रश्न का उत्तर दें।) यदि आप दैनिक आधार पर कई गोले (जैसे, bash
और zsh
) का उपयोग करते हैं, तो आपके पैटर्न भिन्न हो सकते हैं। यदि आपका प्राथमिक शेल (जैसा कि परिभाषित किया गया है /etc/passwd
) है bash
, तो आप एक zsh
लॉगिन शेल इनवॉइस करना चाहते हैं , और उसके बाद संभवत: कुछ इंटरएक्टिव नॉन-लॉगिन zsh
शेल को इनवॉइस पर भेज सकते हैं। आपको संभवतः एक लॉगिन शेल होने से बचना चाहिए जो उसी प्रकार के अन्य लॉगिन शेल के अधीन है।
जैसा कि लॉगिन शेल और नॉन-लॉगिन शेल के बीच अंतर का उल्लेख किया गया है ? , ओएस एक्स टर्मिनल एप्लिकेशन एक लॉगिन शेल चलाता है, इसलिए एक विशिष्ट उपयोगकर्ता के पास आमतौर पर कई "लॉगिन शेल" एक साथ चलेंगे। यह एक अलग मॉडल है जिसे मैंने ऊपर वर्णित किया है, और उपयोगकर्ता को अपने .login
या उसके द्वारा किए गए कार्यों पर पुनर्विचार करने की आवश्यकता हो सकती है.profile
(या जो भी) फ़ाइल। मुझे नहीं पता कि क्या ओएस एक्स डेवलपर्स ने इस डिजाइन निर्णय के लिए अपने औचित्य का दस्तावेजीकरण किया है। लेकिन मैं ऐसी स्थिति की कल्पना कर सकता हूं जिसमें यह उपयोगी होगा। एक समय था जब मैंने आदत डाल ली थी जब मैंने लॉग इन किया था, और मैं उन्हें अलग-अलग टेक्स्ट और बैकग्राउंड कलर्स (स्क्रीन पर ANSI एस्केप सीक्वेंस लिखकर) सेट करने में मदद करूंगा ताकि मुझे पता चल सके कि कौन सा है। टर्मिनल रंग एक ऐसी चीज़ का उदाहरण है जो बच्चों को विरासत में नहीं मिलती है, लेकिन एक खिड़की के भीतर बनी रहती है। तो यह इस तरह की बात है कि आप हर बार जब आप एक नई टर्मिनल विंडो शुरू करना चाहते हैं, लेकिन हर बार जब आप एक नया इंटरेक्टिव खोल शुरू नहीं करेंगे।