मुझे अपने द्वारा खोले गए प्रत्येक टर्मिनल में `स्रोत .profile` क्यों करना है?


10

जब हम ~/.profileउबंटू में कुछ चर बदलते हैं , तो हम कमांड निष्पादित करते हैं source .profile। फिर परिवर्तन केवल इस टर्मिनल में प्रभावी है । यदि हम एक नया टर्मिनल खोलते हैं तो हमें कमांड को source .profileफिर से निष्पादित करना होगा। इसलिए ऐसा लगता है कि विभिन्न टर्मिनलों का अपना वातावरण है, हालांकि वे एक ही उपयोगकर्ता के हो सकते हैं।

हर टर्मिनल को अपना पर्यावरण पथ बनाने का क्या फायदा है? ऐसा लगता है कि यह बेहतर होगा यदि अलग-अलग टर्मिनल जो एक ही उपयोगकर्ता के हैं, एक ही पर्यावरण चर साझा करते हैं।



यदि आपका लॉगिन "शेल" एक GUI है, तो यह आपके GUI के बजाय sh की लॉगिन स्क्रिप्ट में var को सेट करने में ज्यादा मदद नहीं करता है।
इकेगामी

जवाबों:


14

इसका कारण यह है कि ~/.profileलॉगिन गोले द्वारा केवल खट्टा है। जब आप एक नई टर्मिनल विंडो खोलते हैं, तो जो शेल शुरू होता है वह डिफ़ॉल्ट रूप से एक गैर-लॉगिन शेल होता है। यदि आप लॉग आउट करते हैं, और वापस लॉग इन करते हैं, तो परिवर्तन ~/.profileआपके सभी टर्मिनलों में प्रभावी होगा, क्योंकि ~/.profileजब आप अपने सत्र में लॉग इन करते हैं तो यह खट्टा होता है।

यह मामला नहीं है कि विभिन्न टर्मिनल खिड़कियों में एक अलग वातावरण होता है, लेकिन यह कि सोर्सिंग ~/.profileकेवल ~/.profileवर्तमान शेल में निष्पादित होता है (यह वही है जो sourceकमांड करता है)।

इसके विपरीत, ~/.bashrcआपके द्वारा खोले गए किसी भी नए टर्मिनल विंडो को तुरंत बदलने या आपके द्वारा शुरू किए गए किसी भी बैश शेल को प्रभावित करेगा bash, क्योंकि यह सभी इंटरएक्टिव बैश शेल द्वारा sourced है।


3

पर्यावरण चर केवल उपयोगकर्ता वरीयताओं के लिए नहीं हैं। वे माता-पिता की प्रक्रिया से लेकर शुरू होने वाली बाल प्रक्रियाओं तक की विभिन्न प्रकार की सूचनाओं को संप्रेषित करने के लिए एक सामान्य तंत्र हैं।

ऐसे कई मामले हैं जहां एक प्रक्रिया विशिष्ट पर्यावरण चर निर्धारित करेगी ताकि यह शुरू होने वाली प्रक्रियाओं को प्रभावित कर सके। उदाहरण के लिए, एक स्क्रिप्ट जानबूझकर स्थानीय सेटिंग्स को शुरू होने वाली कमांड के लिए रीसेट कर सकती है, जैसे कि यह उनसे आउटपुट पार्स कर सकता है। कई बड़े सॉफ्टवेयर पैकेजों की बिल्ड स्क्रिप्ट makeपर्यावरण चर के माध्यम से एक दूसरे के साथ समन्वय के नेस्टेड इनवोकेशन का उपयोग करती है। विशेष उपकरणों को $ LD_PRELOAD या $ PATH के साथ ट्रिक्स करके शुरू होने वाले अन्य कार्यक्रमों की कार्य स्थितियों को बदलने की आवश्यकता हो सकती है।

यदि कोई उपयोगकर्ता एक अलग विंडो में करता है, जबकि एक लंबी संकलन दूसरे में चल रही है, तो बस उसकी पीठ, पागलपन और अराजकता के पीछे उसकी सभी प्रक्रियाओं के पर्यावरण चर को जादुई रूप से बदल देगा।

अन्य पर्यावरण चर में किसी विशेष सत्र के बारे में जानकारी होती है, जिसमें एक प्रक्रिया शुरू की जाती है। प्रोग्राम्स को विशेष टर्मिनल (या टर्मिनल एमुलेटर) के कमांड सेट का वर्णन करने के लिए $ TERM की अपेक्षा होती है, जिनसे वे जुड़े होते हैं; प्रति उपयोगकर्ता सेटिंग सामान्य बनाने से कई अलग-अलग प्रकार के टर्मिनलों के साथ एक ही सिस्टम में लॉग इन करना असंभव हो जाएगा। यहां तक ​​कि अगर आपके पास केवल टर्मिनल हार्डवेयर का एक टुकड़ा है और कभी भी दूरस्थ रूप से लॉग इन नहीं screenकरते हैं , तो प्रोग्राम जैसे कि उनके सत्र के अंदर चलने वाली प्रक्रियाओं के लिए एक अलग $ TERM सेट करने पर निर्भर करते हैं।

एक बेहतर सवाल यह होगा कि हम प्रति उपयोगकर्ता डेटाबेस के बजाय उपयोगकर्ता वरीयता सेटिंग्स के लिए प्रक्रिया-से-सबप्रोसेस संचार तंत्र का उपयोग क्यों करते हैं?

उत्तर: क्योंकि यह काफी अच्छी तरह से काम करता है और प्रति-उपयोगकर्ता डेटाबेस बनाने के लाभों बड़ा पर्याप्त बदलने का काम है कि नहीं कर रहे हैं सब कुछ का उपयोग करने के कि बजाय वातावरण चर की जाएगी।

(मैं बहुत कुछ वरीयता सेटिंग के बारे में सोच सकते हैं, जहां वहाँ नहीं होता खो कार्यक्षमता के लिए नहीं क्रम में उदाहरण के लिए, कुछ का उपयोग मामलों में जहां यह उन्हें बस एक ही स्क्रिप्ट पर कार्य के लिए बदलने के लिए सुविधाजनक है हो सकता है। तो, सब कुछ अभी भी अवश्य होना चाहिए कि overridable द्वारा पर्यावरण चर, जिसके परिणामस्वरूप जटिलता और अधिक भ्रमित उपयोगकर्ता हैं)।

ऐसा नहीं है कि विकल्प मौजूद नहीं हैं । उदाहरण के लिए, X संसाधन प्रक्रिया के बजाय प्रदर्शन सत्र प्रति हैं। लेकिन वे कमांड लाइन कार्यक्रमों के लिए उपयोग करने के लिए मुश्किल हो जाता है - और कमांड लाइन कार्यक्रम आम तौर पर दूरदराज के लॉगिन भी है कि नहीं है के लिए काम करने के लिए की जरूरत है एक एक्स सर्वर से कनेक्ट करने के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.