क्यों .profile (और .bashrc) पथ के लिए ~ / बिन जोड़ता है?


9

चूंकि .bashrcअधिक "जेनेरिक" है (इस अर्थ में कि .profileयह स्रोत), क्यों " ~/binपथ में शामिल करें" प्रक्रिया अंदर नहीं है .bashrc? उपयोगकर्ता इसे गैर-लॉगिन शेल में क्यों नहीं चाहेगा? (विशेषकर आजकल, जहाँ गैर-लॉगिन गोले अधिक आम हैं *)

मुझे पता है कि मैं मैन्युअल रूप से इस तरह के बदलाव कर सकता हूं, लेकिन मैं जानना चाहता हूं कि क्या कोई कारण है।

* यह साबित नहीं कर सकता, लेकिन मुझे लगता है कि मामला है।

जवाबों:


13

~/.bashrcऔर /etc/bash.bashrcहर बार एक इंटरैक्टिव bashशेल शुरू होने पर चलाया जाता है।

इसके विपरीत, ~/.profileऔर /etc/profileहर बार किसी भी लॉगिन शेल शुरू होने पर चलाया जाता है। तो यह एक bashशेल होने की जरूरत नहीं है , लेकिन यह एक लॉगिन शेल होना चाहिए (और कई bashशेल इंस्टेंसेस लॉगिन शेल नहीं हैं )।

  • एक bashशेल एक शेल है जहां शेल प्रोग्राम जो इसे प्रदान करता है bash, बल्कि कुछ अन्य प्रोग्राम, जैसे कि dash
  • लॉगिन शेल एक ऐसा शेल है जो लॉगिन के लिए उपयोगकर्ता इंटरफ़ेस (ग्राफिकल या कमांड-लाइन) प्रदान करने के लिए लॉग इन करने के परिणामस्वरूप स्वचालित रूप से शुरू होता है। जब एक लॉगिन शेल बाहर निकलता है, तो लॉगिन समाप्त हो जाता है।

इसलिए, PATHएक bashrcफ़ाइल में प्रविष्टियों को जोड़ने वाली एक प्रशंसा करना:

  1. जब शेल नहीं है bash, तो कुछ भी मत करो , जो अक्सर होता है। उदाहरण के लिए, PATHजब आप एक ग्राफ़िकल लॉगिन सत्र में अनमॉडिफ़ाइड होंगे। याद रखें, PATHकेवल कमांड-लाइन कार्यक्रमों द्वारा उपयोग नहीं किया जाता है।

  2. नेस्टेड bashगोले की उपस्थिति में इसे बार-बार संलग्न करें । इसलिए, यदि आप एक शेल के भीतर एक शेल शुरू करते हैं - जो कि कई कारणों से बहुत सामान्य है - तो आपके पास ~/binढेर सारी प्रविष्टियाँ होंगी PATH। इससे PATHपर्यावरण चर को पढ़ना मुश्किल हो जाता है, और कभी-कभी प्रदर्शन भी कम हो जाता है।

ये अवांछनीय होगा। इस प्रकार इसे एक फ़ाइल में रखना गलत होगा bashrc; यह वास्तव में है ~/.profile~/.profileके लिए सही जगह है:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

गैर-लॉगिन गोले में लॉगिन शैल (या कुछ ऐसा है जो एक लॉगिन शेल की तरह व्यवहार करता है) उनके माता-पिता के रूप में है, और PATHइस लॉगिन शेल से उनके अधिकांश पर्यावरण चर शामिल हैं । इसलिए पथ-संशोधित करने वाले आदेशों को रखने के लिए ~/.profileआवश्यक है कि आप प्रभावी होने के लिए उन्हें लॉग आउट और बैक करें, लेकिन यह गैर-लॉगिन शेल के वातावरण को भी प्रभावित करता है (साथ ही उन कार्यक्रमों के लिए वातावरण जो शेल नहीं हैं, क्योंकि प्रत्येक प्रोग्राम को इसकी प्राप्ति होती है पर्यावरण चर का अपना सेट - जिसे "पर्यावरण" कहा जाता है - अपनी मूल प्रक्रिया से विरासत में मिला है)।


मै समझता हुँ। लेकिन यह निर्णय अभी भी मेरे लिए मायने नहीं रखता है। अगर अभी एक टर्मिनल खुला है तो यह केवल .bashrc लोड करता है, तो मैं अपना निजी बिन नहीं देख पाऊंगा।
बोरेज

@ SharePoint यदि डिफ़ॉल्ट कॉन्फ़िगरेशन आपके लिए अच्छी तरह से काम नहीं करता है, तो आपको इसे बदलने के लिए स्वतंत्र महसूस करना चाहिए। (यह आपका कंप्यूटर है, सब के बाद। या कम से कम आपका खाता।) लेकिन यह एक बार की चीज की तरह लगता है। binजब आप लॉग ऑन करते हैं , तो यह लगता है कि आपकी निजी निर्देशिका मौजूद नहीं थी और आपने इसे इस लॉगिन सत्र के दौरान बनाया है। यदि आप लॉग आउट करते हैं और वापस अंदर जाते हैं, तो यह आपके में होगा PATH। अपनी निजी binनिर्देशिका बनाने के बाद से यह केवल एक बार किया जाना चाहिए, यह एक बार की असुविधा है।
एलिया कागन

3

यह इसलिए है क्योंकि परंपरागत रूप से पर्यावरण चर केवल /etc/profileया में जाते हैं .profilebashrcफ़ाइल नाम मौजूद हैं, शीघ्र सेटिंग्स, खोल विकल्प और इसके आगे तरह बातें (यानी चीजें हैं जो खोल से सीधे संबंधित) के लिए है।

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