.Bashrc, .bash_profile और .environment के बीच क्या अंतर है?


130

मैंने वर्षों के कई अलग-अलग * निक्स-आधारित प्रणालियों का उपयोग किया है, और ऐसा लगता है कि बैश I उपयोग के हर स्वाद में यह तय करने के लिए एक अलग एल्गोरिथ्म है कि कौन सी स्टार्टअप स्क्रिप्ट को चलाना है। पर्यावरण चर और उपनाम और मुद्रण स्टार्टअप संदेश (जैसे MOTDs) सेट करने जैसे कार्यों के प्रयोजनों के लिए, कौन सा स्टार्टअप स्क्रिप्ट इन करने के लिए उपयुक्त स्थान है?

में बातें डाल बीच क्या अंतर है .bashrc, .bash_profileऔर .environment? मैंने अन्य फाइलें भी देखी हैं .login, जैसे .bash_login, और .profile; क्या ये कभी प्रासंगिक हैं? शारीरिक रूप से लॉग इन करते समय, एसएचएस के माध्यम से दूरस्थ रूप से लॉग इन करने और एक नई टर्मिनल विंडो खोलने पर क्या अंतर होते हैं? प्लेटफार्मों (मैक ओएस एक्स (और इसके टर्मिनल.app सहित) और सिग्विन बैश) में कोई महत्वपूर्ण अंतर हैं?

जवाबों:


73

शेल कॉन्फ़िगरेशन फ़ाइलों के साथ मुख्य अंतर यह है कि कुछ केवल "लॉगिन" गोले (जैसे जब आप किसी अन्य होस्ट से लॉगिन करते हैं, या एक स्थानीय यूनिक्स मशीन के पाठ कंसोल पर लॉगिन करते हैं) द्वारा पढ़े जाते हैं। ये वे हैं जिन्हें कहा जाता है, कहते हैं, .loginया .profileया .zlogin(इस बात पर निर्भर करता है कि आप किस शेल का उपयोग कर रहे हैं)।

फिर आपके पास "इंटरेक्टिव" गोले (जैसे, टर्मिनल के साथ जुड़े हुए हैं, या एक विंडो सिस्टम के तहत चलने वाला टर्मिनल एमुलेटर कहते हैं) के रूप में पढ़ी गई फाइलें कॉन्फ़िगर की गई हैं। ये नाम वाले हैं। जैसे .bashrc, .tcshrc, .zshrc, आदि

bashकि इस पेचीदा हो .bashrcजाता है केवल एक खोल है कि दोनों के द्वारा पढ़ा है इंटरैक्टिव और गैर लॉगिन ताकि आप मिल जाएगा ज्यादातर लोगों अंत उनके कह रही, .bash_profileयह भी पढ़ने के लिए .bashrcकी तरह कुछ के साथ

[[ -r ~/.bashrc ]] && . ~/.bashrc

अन्य गोले अलग तरह से व्यवहार करते हैं - जैसे zsh, .zshrcहमेशा एक इंटरैक्टिव शेल के लिए पढ़ा जाता है, चाहे वह लॉगिन हो या न हो।

बैश के लिए मैनुअल पेज उन परिस्थितियों की व्याख्या करता है जिनके तहत प्रत्येक फ़ाइल को पढ़ा जाता है। हां, व्यवहार आम तौर पर मशीनों के बीच संगत होता है।

.profileमूल रूप से लॉगिन स्क्रिप्ट फ़ाइल नाम का उपयोग किया जाता है /bin/shbash, आम तौर पर पीछे की ओर संगत होने के नाते /bin/sh, .profileअगर कोई मौजूद है तो पढ़ेगा ।


48

यह आसान है। इसमें बताया गया है man bash:

/bin/bash
       The bash executable
/etc/profile
       The systemwide initialization file, executed for login shells
~/.bash_profile
       The personal initialization file, executed for login shells
~/.bashrc
       The individual per-interactive-shell startup file
~/.bash_logout
       The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
       Individual readline initialization file

लॉगिन गोले वे होते हैं जो आपके द्वारा लॉगिन किए गए एक को पढ़ा जाता है (इसलिए, उदाहरण के लिए, केवल xterm शुरू करते समय उन्हें निष्पादित नहीं किया जाता है)। लॉगिन करने के अन्य तरीके भी हैं। उदाहरण के लिए एक्स डिस्प्ले मैनेजर का उपयोग करना। उन लोगों के पास लॉगिन समय पर पर्यावरण चर को पढ़ने और निर्यात करने के अन्य तरीके हैं।

INVOCATIONअध्याय को मैनुअल में भी पढ़ें । यह कहता है "निम्नलिखित पैराग्राफ यह वर्णन करते हैं कि बैश अपनी स्टार्टअप फ़ाइलों को कैसे निष्पादित करता है।" , मुझे लगता है कि यह एक स्पॉट-ऑन है :) यह बताता है कि "इंटरैक्टिव" शेल क्या है।

बैश के बारे में नहीं जानते .environment। मुझे संदेह है कि आपके वितरण की एक फ़ाइल है, जो आपके द्वारा चलाए जा रहे शेल से स्वतंत्र वातावरण चर को सेट करने के लिए।


1
क्या आप /etc/bashrcउत्तर को पूरा करने के लिए जोड़ सकते हैं ?
निमोडेन

9

शास्त्रीय रूप से, ~/.profileबॉर्न शेल द्वारा उपयोग किया जाता है, और संभवतः बैश द्वारा एक विरासत उपाय के रूप में समर्थित है। फिर, ~/.loginऔर ~/.cshrcसी शेल द्वारा उपयोग किया गया - मुझे यकीन नहीं है कि बैश उन्हें बिल्कुल भी उपयोग नहीं करता है।

~/.bash_profileलॉग इन पर एक बार इस्तेमाल किया जाएगा,। ~/.bashrcस्क्रिप्ट हर बार एक खोल शुरू कर दिया है पढ़ा है। यह /.cshrcसी शेल के लिए अनुरूप है ।

एक परिणाम यह है कि सामान ~/.bashrcगैर-लॉगिन शेल शुरू करते समय ओवरहेड को कम करने के लिए जितना संभव हो उतना हल्का (न्यूनतम) होना चाहिए।

मेरा मानना ​​है कि ~/.environmentफ़ाइल कोर्न शेल के लिए एक संगतता फ़ाइल है।


7

मैं .bashrc के बारे में और .bash_profile जानकारी मिली यहाँ यह योग करने के लिए:

लॉगिन करते समय .bash_profile निष्पादित होता है। आपके द्वारा डाले गए सामान में आपके PATH और अन्य महत्वपूर्ण पर्यावरण चर हो सकते हैं।

.bashrc का उपयोग नॉन लॉगइन शेल के लिए किया जाता है। मुझे यकीन नहीं है कि इसका क्या मतलब है। मुझे पता है कि RedHat इसे हर बार निष्पादित करता है जब आप एक और शेल शुरू करते हैं (इस उपयोगकर्ता के लिए su या बस फिर से बैश कॉलिंग करते हैं) आप वहां उपनाम रखना चाह सकते हैं लेकिन फिर से मुझे यकीन नहीं है कि इसका क्या मतलब है। मैं बस इसे खुद को नजरअंदाज करता हूं।

.profile रूट के लिए .bash_profile के बराबर है। मुझे लगता है कि नाम को अन्य गोले (csh, sh, tcsh) के रूप में भी इस्तेमाल किया जाता है। (आप एक उपयोगकर्ता के रूप में एक की जरूरत नहीं है)

वहाँ भी है .bash_logout जो पर निष्पादित होता है, हाँ अच्छा अनुमान ... लॉगआउट। आप बहरों को रोकना चाहते हैं या थोड़ी हाउसकीपिंग भी कर सकते हैं। यदि आप लॉग आउट करते समय स्क्रीन साफ़ करना चाहते हैं, तो आप वहां "स्पष्ट" भी जोड़ सकते हैं।

इसके अलावा यहाँ विन्यास फाइल में से प्रत्येक पर एक पूर्ण अनुवर्ती है

ये शायद और भी विकृत हैं। आश्रित हैं, सभी डिस्ट्रोस अपने साथ प्रत्येक कॉन्फिगरेटन को नहीं चुनते हैं और कुछ को इससे भी अधिक होता है। लेकिन जब उनका समान नाम होता है, तो वे सामान्य रूप से एक ही सामग्री शामिल करते हैं।


4

जोश स्टैगर के अनुसार , मैक ओएस एक्स का टर्मिनल.एप्प वास्तव में .bashrc के बजाय .bash_profile नामक प्रत्येक नई टर्मिनल विंडो के लिए डिफ़ॉल्ट रूप से एक गैर-लॉगिन शेल के बजाय एक लॉगिन शेल चलाता है।

वह अनुशंसा करता है:

अधिकांश समय आप लॉगिन और नॉन-लॉगिन शेल के लिए दो अलग-अलग कॉन्फिगर फाइल को बनाए रखना नहीं चाहते हैं - जब आप एक पैट सेट करते हैं, तो आप इसे दोनों पर लागू करना चाहते हैं। आप अपनी .bash_profile फ़ाइल से .bashrc सोर्सिंग करके इसे ठीक कर सकते हैं, फिर PATH और आम सेटिंग्स को .bashrc में डाल सकते हैं।

ऐसा करने के लिए, निम्न पंक्तियों को .bash_profile में जोड़ें:

if [ -f ~/.bashrc ]; then 
    source ~/.bashrc 
fi

अब जब आप कंसोल से अपनी मशीन में लॉगिन करेंगे तो .bashrc कहा जाएगा।


2

देखने के लिए एक अच्छी जगह बैश का मैन पेज है। यहाँ एक ऑनलाइन संस्करण है। "निवेश" अनुभाग देखें।


0

मैंने डेबियन-फैमिली डिस्ट्रोस का उपयोग किया है जो निष्पादित करने के लिए प्रकट होते हैं .profile, लेकिन नहीं .bash_profile, जबकि आरएचईएल डेरिवेटिव .bash_profileपहले निष्पादित करते हैं .profile

यह एक गड़बड़ लगता है जब आपको किसी भी लिनक्स ओएस में काम करने के लिए पर्यावरण चर सेट करना पड़ता है।

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