2009-01-06 12 views
130

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

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

उत्तर

73

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

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

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

तरह

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

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

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

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

7

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

.bash_profile जब आप लॉगिन निष्पादित किया जाता है। आपके द्वारा रखी गई सामग्री आपके पाथ और अन्य महत्वपूर्ण पर्यावरण चर हो सकती है।

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

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

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

इसके अलावा वहाँ एक पूरा पालन विन्यास की प्रत्येक फाइल पर here

ये शायद distro. पर निर्भर कर रहे हैं, नहीं सभी distros उन लोगों के साथ प्रत्येक configuraton है चुन और कुछ और भी है। लेकिन जब उनके पास एक ही नाम होता है, तो वे सामान्य रूप से एक ही सामग्री शामिल करते हैं।

2

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

9

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

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

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

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

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 

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

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

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

+1

क्या आप उत्तर भरने के लिए '/ etc/bashrc' जोड़ सकते हैं? – Nemoden

4

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

उन्होंने सिफारिश की गई है:

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

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

:

ऐसा करने के लिए, निम्नलिखित लाइनों .bash_profile में जोड़ें।

0

मैं डेबियन-परिवार distros जो .profile निष्पादित करने के लिए दिखाई देते हैं का इस्तेमाल किया है, लेकिन नहीं .bash_profile, जबकि RHEL डेरिवेटिव .profile से पहले .bash_profile निष्पादित।

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

संबंधित मुद्दे