.Bashrc और .bash_profile के बीच अंतर


450

बीच क्या अंतर है .bashrcऔर .bash_profileऔर जो एक मैं इस्तेमाल करना चाहिए?



यदि आप एक अधिक संपूर्ण विवरण चाहते हैं जिसमें यह भी शामिल है .profile, तो इस प्रश्न पर एक नज़र डालें: superuser.com/questions/789448/…
फ़्लिम

यह उत्तर कुछ पहलुओं को भी कवर करता है stackoverflow.com/questions/415403/…
सर्गेई

जवाबों:


518

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

बैश एक बॉर्न जैसा खोल है। यह ~/.bash_profileतब से कमांड पढ़ता है जब इसे लॉगिन शेल के रूप में लागू किया जाता है, और यदि वह फ़ाइल मौजूद नहीं है, तो ~/.profileइसके बजाय पढ़ने की कोशिश करता है ।

आप किसी भी समय सीधे शेल खोल सकते हैं, उदाहरण के लिए एक GUI वातावरण के अंदर एक टर्मिनल एमुलेटर लॉन्च करके। यदि शेल एक लॉगिन शेल नहीं है, तो यह पढ़ा नहीं जाता है ~/.profile। जब आप एक इंटरैक्टिव शेल के रूप में बैश करना शुरू करते हैं (यानी, स्क्रिप्ट को चलाने के लिए नहीं), तो यह पढ़ता है ~/.bashrc(जब एक लॉगिन शेल के रूप में आमंत्रित किया जाता है, तो यह केवल पढ़ता है ~/.bash_profileया ~/.profile

इसलिए:

  • ~/.profile आपके पूरे सत्र पर लागू होने वाले सामान को रखने के लिए जगह है, जैसे कि आप जब आप लॉग इन करते हैं, लेकिन जब आप ग्राफ़िकल प्रोग्राम नहीं करते हैं, तो वे एक अलग फ़ाइल में जाते हैं, और पर्यावरण चर परिभाषाएँ।

  • ~/.bashrcसामान रखने की वह जगह है जो केवल खुद को कोसने के लिए लागू होती है, जैसे कि उपनाम और फ़ंक्शन परिभाषा, शेल विकल्प और त्वरित सेटिंग्स। (आप वहां प्रमुख बाइंडिंग भी रख सकते हैं, लेकिन वे आम तौर पर अलग हो जाते हैं ~/.inputrc।)

  • ~/.bash_profile can be used instead of ~/.profile, but it is read by bash only, not by any other shell. (This is mostly a concern if you want your initialization files to work on multiple machines and your login shell isn't bash on all of them.) This is a logical place to include ~/.bashrc if the shell is interactive. I recommend the following contents in ~/.bash_profile:

    if [ -r ~/.profile ]; then . ~/.profile; fi
    case "$-" in *i*) if [ -r ~/.bashrc ]; then . ~/.bashrc; fi;; esac

आधुनिक यूनियनों में, इससे जुड़ी एक और जटिलता है ~/.profile। यदि आप ग्राफ़िकल वातावरण में लॉग इन करते हैं (अर्थात, यदि प्रोग्राम जहाँ आप अपना पासवर्ड ग्राफिक्स मोड में चला रहे हैं), तो आपको स्वचालित रूप से एक लॉगिन शेल नहीं मिलता है जो पढ़ता है ~/.profile। आपके द्वारा बाद में चलाए जाने वाले विंडो मैनेजर या डेस्कटॉप वातावरण पर, ग्राफ़िकल लॉगिन प्रोग्राम के आधार पर, और आपके वितरण ने इन प्रोग्रामों को कैसे कॉन्फ़िगर किया, यह आपके ~/.profileपढ़ने या नहीं पढ़ा जा सकता है। यदि यह नहीं है, तो आमतौर पर एक और जगह है जहां आप लॉग इन करने के लिए लॉन्च करने के लिए पर्यावरण चर और कार्यक्रमों को परिभाषित कर सकते हैं, लेकिन दुर्भाग्य से कोई मानक स्थान नहीं है।

ध्यान दें कि आप यहां देख सकते हैं और पर्यावरणीय चर परिभाषाओं को ~/.bashrcया तो डाल सकते हैं या हमेशा टर्मिनलों में लॉगिन गोले लॉन्च कर सकते हैं । दोनों बुरे विचार हैं। इन विचारों में से किसी एक के साथ सबसे आम समस्या यह है कि आपका पर्यावरण चर केवल टर्मिनल के माध्यम से शुरू किए गए कार्यक्रमों में सेट किया जाएगा, न कि सीधे एक आइकन या मेनू या कीबोर्ड शॉर्टकट के साथ शुरू किए गए कार्यक्रमों में।

¹ पूर्णता के लिए, अनुरोध द्वारा: अगर .bash_profileमौजूद नहीं है, पार्टी भी कोशिश करता है .bash_loginपर वापस गिरने से पहले .profile। यह मौजूद है इसे भूलने के लिए स्वतंत्र महसूस करें।


11
अच्छी पोस्ट के लिए +1। ALSO आपको "लॉगिन ग्राफ़िकल बनाम लॉगिन शेल" के बारे में अनुभाग जोड़ने के लिए धन्यवाद ... मुझे वह समस्या थी जहां मैंने सोचा था कि ~ / .profile। हमेशा ग्राफ़िकल / शेल के लिए निष्पादित करेगा ... लेकिन जब उपयोगकर्ता लॉग इन करता है तो यह निष्पादित नहीं करता है। चित्रमय लॉगिन के माध्यम से। उस रहस्य को सुलझाने के लिए धन्यवाद।
ट्रेवर बॉयड स्मिथ

4
@ गिल्स: क्या आप अधिक विस्तार से बता सकते हैं, उदाहरण के साथ, प्रत्येक टर्मिनल में एक लॉगिन शेल क्यों चलाना एक बुरा विचार है? क्या यह केवल डेस्कटॉप लिनक्स के साथ एक समस्या है? (मैं इकट्ठा करता हूं कि ओएस एक्स टर्मिनल हर बार एक लॉगिन शेल चलाता है, और मैंने कभी भी किसी भी दुष्प्रभाव पर ध्यान नहीं दिया है (हालांकि मैं आमतौर पर iTerm का उपयोग करता हूं)। लेकिन फिर मैं कई पर्यावरण चर के बारे में नहीं सोच सकता जो मैं बाहर से देखभाल करूंगा। एक टर्मिनल। (हो सकता है HTTP_PROXY?))
iconoclast

2
@ ब्रैंडन यदि आप प्रत्येक टर्मिनल में एक लॉगिन शेल चलाते हैं, जो पर्यावरण द्वारा प्रदान किए गए पर्यावरण चर को ओवरराइड करेगा। रोजमर्रा की स्थितियों में, आप इसके साथ भाग सकते हैं, लेकिन यह आपको जल्द या बाद में आ जाएगा, जब आप एक टर्मिनल में अलग-अलग चर स्थापित करना चाहते हैं (कहते हैं, एक प्रोग्राम के एक अलग संस्करण को आज़माने के लिए): लॉगिन शेल आपकी स्थानीय सेटिंग को ओवरराइड करेगा।
गाइल्स

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

3
@ गिल्स ज़रूर, लेकिन जवाब में जिस तरह से वाक्य तैयार किया गया है, उससे पता चलता है कि इसमें शामिल करने की आवश्यकता है, जिसके बजाय ~/.bashrcचुनने के साथ कुछ करना है ~/.bash_profile, ~/.profileजो सच नहीं है। यदि किसी ~/.bashrcको किसी भी तरह की स्क्रिप्ट लॉगिन समय (यहाँ यह ~/.bash_profileया तो है ~/.profile) में शामिल किया जा रहा है, क्योंकि वह चाहता है कि सेटिंग ~/.bashrcलॉगिन लॉग पर लागू की जाए जिस तरह से वे गैर-लॉगिन शेल पर लागू हो रहे हैं।
पायोटर डोब्रोगोस्ट

53

इस छोटे से लेख से

बैश मैन पेज के अनुसार, .bash_profile लॉगिन गोले के लिए निष्पादित किया जाता है, जबकि .bashrc इंटरैक्टिव गैर-लॉगिन गोले के लिए निष्पादित किया जाता है।

लॉगिन या गैर-लॉगिन शेल क्या है?

जब आप कंसोल के माध्यम से लॉगिन (जैसे: उपयोगकर्ता नाम और पासवर्ड) टाइप करते हैं, तो बूटिंग के समय या तो मशीन पर भौतिक रूप से बैठे, या ssh: .bash_profile को प्रारंभिक कमांड प्रॉम्प्ट से पहले चीजों को कॉन्फ़िगर करने के लिए निष्पादित किया जाता है।

लेकिन, यदि आपने पहले से ही अपनी मशीन में लॉग इन किया है और Gnome या KDE के अंदर एक नई टर्मिनल विंडो (xterm) खोलते हैं, तो .bashrc को विंडो कमांड प्रॉम्प्ट से पहले निष्पादित किया जाता है। .bashrc तब भी चलाया जाता है जब आप टर्मिनल में टाइपिंग / बिन / बैश करके एक नया बैश इंस्टेंस शुरू करते हैं।


12
थोड़ा अद्यतन: 'निष्पादित' शायद थोड़ा भ्रामक शब्द है, वे दोनों खट्टे हैं। निष्पादित ध्वनियों की तरह यह एक स्क्रिप्ट के रूप में चलाया जाता है, कांटा / निष्पादित याद्दा। यह वर्तमान शेल के संदर्भ में चलाया जाता है अधिक महत्वपूर्ण बात, .bashrc अक्सर अधिक चलाया जाता है। यह प्रत्येक बैश स्क्रिप्ट रन पर चलाया जाता है, और यदि आपके पास .bash_profile नहीं है। इसके अलावा, आप अपने xterms को कैसे सेट करते हैं, इसके आधार पर आप एक शेल बना सकते हैं जो स्रोत हैं .bash_profile
रिच होमोलका

36

पुराने दिनों में, जब छद्म ट्टी की छद्म नहीं थी और वास्तव में, अच्छी तरह से टाइप किया गया था, और UNIXes को मॉडेम द्वारा एक्सेस किया गया था ताकि आप प्रत्येक पत्र को अपनी स्क्रीन पर मुद्रित होते देख सकें, दक्षता सर्वोपरि थी। दक्षता में मदद करने के लिए कुछ हद तक आपके पास एक मुख्य लॉगिन विंडो की अवधारणा थी और जो भी अन्य खिड़कियां वास्तव में काम करती थीं। आपकी मुख्य विंडो में, आप किसी भी नए मेल पर सूचनाएँ चाहेंगे, संभवतः पृष्ठभूमि में कुछ अन्य प्रोग्राम चलाएं।

इसका समर्थन करने के लिए, गोले ने .profileविशेष रूप से 'लॉगिन गोले' पर एक फ़ाइल को सीज किया। यह एक सत्र सेटअप के बाद, विशेष कार्य करेगा। बैश ने इसे पहले .bash_profile को देखने के लिए कुछ हद तक बढ़ा दिया है। पहले, इस तरह से आप केवल चीजों को वहां डाल सकते हैं (इसलिए वे बॉर्न शेल को स्क्रू नहीं करते हैं, आदि, जो कि .profile को भी देखते हैं)। अन्य गोले, गैर-लॉगिन, केवल आरसी फ़ाइल, .bashrc (या .kshrc, आदि) का स्रोत होगा।

यह अब थोडा एनाक्रोसिज्म है। आप एक मुख्य विंडो में लॉग इन नहीं करते हैं जितना कि आप एक gui विंडो मैनेजर में लॉग इन करते हैं। कोई भी मुख्य विंडो किसी भी अन्य विंडो से अलग नहीं है।

मेरा सुझाव - इस अंतर के बारे में चिंता मत करो, यह यूनिक्स के उपयोग की एक पुरानी शैली पर आधारित है। अपनी फ़ाइलों में अंतर को हटा दें। .Bash_profile की संपूर्ण सामग्री होनी चाहिए:

[ -f $HOME/.bashrc ] && . $HOME/.bashrc

और वह सब कुछ डालें जो आप वास्तव में .bashrc में सेट करना चाहते हैं

याद रखें कि .bashrc सभी गोले, इंटरैक्टिव और गैर-इंटरैक्टिव के लिए sourced है। आप इस कोड को .bashrc के शीर्ष के पास लगाकर गैर-संवादात्मक गोले के लिए सोर्सिंग शॉर्ट सर्किट कर सकते हैं:

[[ $- != *i* ]] && return


6
यह एक बुरा विचार है, मेरा जवाब देखिए । विशेष रूप से, आपके पर्यावरण चर केवल टर्मिनल के माध्यम से लॉन्च किए गए कार्यक्रमों में सेट किए जाएंगे, न कि सीधे एक आइकन या मेनू या कीबोर्ड शॉर्टकट के साथ शुरू किए गए कार्यक्रमों में।
गाइल्स

4
@ मुझे समझ में नहीं आता कि आप ऐसा क्यों दावा करते हैं। साथ .$HOME/.bashrcके रूप में अमीर ऊपर से पता चला है, में सेटिंग्स .bashrcलॉगिन गोले में उपलब्ध हो जाएगा, और इस प्रकार डेस्कटॉप वातावरण के रूप में अच्छी तरह से। उदाहरण के लिए, मेरे फेडोरा सिस्टम पर, gnome-sessionजैसा कि शुरू किया गया है -$SHELL -c gnome-session, .profileपढ़ा जाता है।
मिकेल

2
@PiotrDobrogost ओह, हां, रिच के जवाब के साथ एक और समस्या है। आम तौर पर शामिल करने .bashrcसे .profileकाम नहीं चलता है, क्योंकि .profileहो सकता है कि इसे निष्पादित /bin/shन किया जाए और न ही किया जाए (उदाहरण के लिए डिफ़ॉल्ट रूप से ग्राफ़िकल लॉगिन के लिए उबंटू पर), और यह शेल इंटरैक्टिव नहीं हो सकता है (उदाहरण के लिए ग्राफ़िकल लॉगिन के लिए)।
गाइल्स

3
@ गिल्स री: ".bashrc इन .profile" बिल्कुल भी नहीं है जो अनुशंसित था (वास्तव में, इसके विपरीत)। या तो उत्तर को संपादित किया गया था (यह ऐसा प्रतीत नहीं होता है), या आपकी टिप्पणी के साथ संरेखित नहीं है जो कहा जा रहा है।
माइकल

2
सामान्य तौर पर, +1, लेकिन मैं "शॉर्ट सर्किट ... नॉन-इंटरेक्टिव गोले के लिए" ("शीर्ष के शीर्ष पर .Bashrc: [[ $- != *i* ]] && return") की सिफारिश को जोड़ूंगा ; मुझे पसंद है कि मेरे कुछ .bashrcगैर-संवादात्मक गोले के लिए भी निष्पादित किए जाएं, विशेष रूप से जारी करते समय एनवी संस्करण सेट करने के लिए ssh hostname {command}, ताकि दूरस्थ कमांड सही तरीके से निष्पादित हो जाएं (भले ही शेल गैर-संवादात्मक हो)। लेकिन बाद में अन्य सेटिंग्स .bashrcको अनदेखा किया जाना चाहिए। मैं आमतौर पर TERM = डंबल और / या अनसेट के लिए जाँच करता हूं, और फिर जल्दी बाहर निकल जाता हूं।
माइकल

18

श्रीवत्सआर की इस बेहतरीन ब्लॉग पोस्ट पर एक नजर । यहां एक उद्धरण है, लेकिन ब्लॉग पोस्ट पर जाएं, इसमें "लॉगिन शेल", एक फ्लो चार्ट और ज़श के लिए एक समान तालिका जैसे शब्दों के लिए स्पष्टीकरण शामिल है।

बैश के लिए, वे निम्नानुसार काम करते हैं। उपयुक्त कॉलम पढ़ें। ए, फिर बी, सी, आदि बी 1, बी 2, बी 2, बी 3 का अर्थ है कि यह उन फाइलों में से पहले को निष्पादित करता है।

+----------------+-----------+-----------+------+
|                |Interactive|Interactive|Script|
|                |login      |non-login  |      |
+----------------+-----------+-----------+------+
|/etc/profile    |   A       |           |      |
+----------------+-----------+-----------+------+
|/etc/bash.bashrc|           |    A      |      |
+----------------+-----------+-----------+------+
|~/.bashrc       |           |    B      |      |
+----------------+-----------+-----------+------+
|~/.bash_profile |   B1      |           |      |
+----------------+-----------+-----------+------+
|~/.bash_login   |   B2      |           |      |
+----------------+-----------+-----------+------+
|~/.profile      |   B3      |           |      |
+----------------+-----------+-----------+------+
|BASH_ENV        |           |           |  A   |
+----------------+-----------+-----------+------+
|                |           |           |      |
+----------------+-----------+-----------+------+
|                |           |           |      |
+----------------+-----------+-----------+------+
|~/.bash_logout  |    C      |           |      |
+----------------+-----------+-----------+------+

एक ही उत्तर को कई प्रश्नों पर पोस्ट करने के बजाय यह पसंद किया जाता है यदि आप अपने उत्तर को पूछने वाले की विशिष्ट आवश्यकताओं के अनुरूप बना सकते हैं। यदि उत्तर दोनों प्रश्नों के लिए बिल्कुल समान है, तो आपको एक ही उत्तर पोस्ट करना चाहिए और अन्य प्रश्नों को मूल के डुप्लिकेट के रूप में बंद करने के लिए मतदान करना चाहिए।
Mokubai

1
@ मोकूबाई अन्य प्रश्न पहले से ही इस एक के डुप्लिकेट के रूप में चिह्नित किया गया है।
फ्लिमल

@ElipticalView: कुछ भी नहीं करने के लिए सेट करके, आप लाइन का उल्लेख कर रहे हैं [ -z "$PS1" ] && return:? मेरे उत्तर की तालिका बैश द्वारा चलाए जाने वाले लिपियों की सूची को दे रही है, भले ही लिपियों की सामग्री की परवाह किए बिना, यदि स्क्रिप्ट में ही लाइन है [ -z "$PS1" ] && return, जो प्रभावी होगी, लेकिन मुझे नहीं लगता कि इसका मतलब यह होना चाहिए कि मुझे बदलना चाहिए तालिका।
फ्लिम

5

/ ईटीसी / शख्सियत के लिए एक बेहतर टिप्पणी

ऊपर Flimm के महान जवाब पर बिल्डिंग, मैं अपने डेबियन / etc / प्रोफ़ाइल के सिर पर इस नई टिप्पणी insered, (यदि आप अपने distro के लिए इसे समायोजित करने की आवश्यकता हो सकती है।) :

# For BASH: Read down the appropriate column. Executes A, then B, then C, etc.
# The B1, B2, B3 means it executes only the first of those files found.  (A)
# or (B2) means it is normally sourced by (read by and included in) the
# primary file, in this case A or B2.
#
# +---------------------------------+-------+-----+------------+
# |                                 | Interactive | non-Inter. |
# +---------------------------------+-------+-----+------------+
# |                                 | login |    non-login     |
# +---------------------------------+-------+-----+------------+
# |                                 |       |     |            |
# |   ALL USERS:                    |       |     |            |
# +---------------------------------+-------+-----+------------+
# |BASH_ENV                         |       |     |     A      | not interactive or login
# |                                 |       |     |            |
# +---------------------------------+-------+-----+------------+
# |/etc/profile                     |   A   |     |            | set PATH & PS1, & call following:
# +---------------------------------+-------+-----+------------+
# |/etc/bash.bashrc                 |  (A)  |  A  |            | Better PS1 + command-not-found 
# +---------------------------------+-------+-----+------------+
# |/etc/profile.d/bash_completion.sh|  (A)  |     |            |
# +---------------------------------+-------+-----+------------+
# |/etc/profile.d/vte-2.91.sh       |  (A)  |     |            | Virt. Terminal Emulator
# |/etc/profile.d/vte.sh            |  (A)  |     |            |
# +---------------------------------+-------+-----+------------+
# |                                 |       |     |            |
# |   A SPECIFIC USER:              |       |     |            |
# +---------------------------------+-------+-----+------------+
# |~/.bash_profile    (bash only)   |   B1  |     |            | (doesn't currently exist) 
# +---------------------------------+-------+-----+------------+
# |~/.bash_login      (bash only)   |   B2  |     |            | (didn't exist) **
# +---------------------------------+-------+-----+------------+
# |~/.profile         (all shells)  |   B3  |     |            | (doesn't currently exist)
# +---------------------------------+-------+-----+------------+
# |~/.bashrc          (bash only)   |  (B2) |  B  |            | colorizes bash: su=red, other_users=green
# +---------------------------------+-------+-----+------------+
# |                                 |       |     |            |
# +---------------------------------+-------+-----+------------+
# |~/.bash_logout                   |    C  |     |            |
# +---------------------------------+-------+-----+------------+
#
# ** (sources !/.bashrc to colorize login, for when booting into non-gui)

और यह नोट इसे संदर्भित करने के लिए अन्य सेटअप फ़ाइलों में से प्रत्येक के सिर पर है:

# TIP: SEE TABLE in /etc/profile of BASH SETUP FILES AND THEIR LOAD SEQUENCE

वर्थ नोटिंग मुझे लगता है कि डिफ़ॉल्ट स्रोतों से डेबियन / आदि / प्रोफ़ाइल (शामिल) /etc/bash.bashrc (यह तब है जब /etc/bash.bashrc मौजूद है)। इसलिए लॉगिन स्क्रिप्ट दोनों / आदि फ़ाइलों को पढ़ते हैं, जबकि गैर-लॉगिन केवल bash.bashrc पढ़ता है।

यह भी ध्यान दें कि /etc/bash.bashrc कुछ भी नहीं करने के लिए सेट है जब यह अंतःक्रियात्मक रूप से नहीं चलता है। इसलिए ये दोनों फाइलें केवल इंटरैक्टिव स्क्रिप्ट के लिए हैं।


4

बाश के खुद के कॉन्फ़िगरेशन तर्क पागल जटिल नहीं है और इस पृष्ठ पर अन्य उत्तर में सर्वरफॉल्ट और कई ब्लॉगों में समझाया गया है। हालांकि समस्या यह है कि लिनक्स वितरण क्या बैश करता है , मेरा मतलब है कि वे जटिल और विभिन्न तरीकों से डिफ़ॉल्ट रूप से बैश को कॉन्फ़िगर करते हैं। http://mywiki.wooledge.org/DotFiles में इनमें से कुछ उद्धरणों का संक्षेप में उल्लेख किया गया है। फेडोरा 29 पर यहां एक नमूना ट्रेस है, यह दिखाता है कि कौन सी फाइल स्रोत है जो अन्य फ़ाइल (एस) और किस क्रम में एक बहुत ही सरल परिदृश्य के लिए: दूरस्थ रूप से ssh के साथ जुड़ना और फिर एक और उपधारा शुरू करना:

ssh fedora29
 └─ -bash # login shell
      ├── /etc/profile
      |    ├─ /etc/profile.d/*.sh
      |    ├─ /etc/profile.d/sh.local
      |    └─ /etc/bashrc
      ├── ~/.bash_profile
      |    └─ ~/.bashrc
      |          └─ /etc/bashrc
      |
      |
      └─ $ bash  # non-login shell
            └─ ~/.bashrc
                 └─ /etc/bashrc
                       └─ /etc/profile.d/*.sh

फेडोरा का सबसे जटिल तर्क है /etc/bashrc। जैसा कि ऊपर देखा गया है /etc/bashrcकि एक फाइल बैश के बारे में खुद ही नहीं पता है, मेरा मतलब सीधे नहीं है। फेडोरा के /etc/bashrcपरीक्षण चाहे:

  • यह एक लॉगिन शेल द्वारा दिया जा रहा है,
  • यह एक इंटरैक्टिव शेल द्वारा sourced किया जा रहा है,
  • यह पहले से ही खट्टा हो चुका है

... और फिर उन पर निर्भर करता है पूरी तरह से अलग बातें करता है।

अगर आपको लगता है कि ऊपर दिए गए ग्राफ को याद कर सकते हैं तो बहुत बुरा है क्योंकि यह लगभग पर्याप्त नहीं है: यह ग्राफ केवल एक परिदृश्य का वर्णन करता है, गैर-संवादात्मक स्क्रिप्ट चलाने या ग्राफिकल सत्र शुरू करने पर थोड़ा अलग चीजें होती हैं। मैंने छोड़ दिया है ~/.profile। मैंने bash_completionस्क्रिप्ट्स को छोड़ दिया है । पिछड़े अनुकूलता कारणों के लिए, इसके व्यवहार /bin/shको /bin/bashबदलने के बजाय बैश को लागू करना। क्या zsh और अन्य गोले के बारे में? और निश्चित रूप से अलग-अलग लिनक्स वितरण अलग तरीके से करते हैं, उदाहरण के लिए डेबियन और उबंटू बेस एच के एक गैर-मानक संस्करण के साथ आते हैं , इसमें डेबियन-विशिष्ट अनुकूलन (ओं) हैं। यह विशेष रूप से एक असामान्य फ़ाइल के लिए दिखता है:/etc/bash.bashrc। यहां तक ​​कि अगर आप एक ही लिनक्स वितरण से चिपके रहते हैं, तो संभवतः यह समय के साथ विकसित होता है। प्रतीक्षा करें: हमने macOS, FreeBSD को भी नहीं छुआ है, ... अंत में, आइए उन उपयोगकर्ताओं के लिए विचार करें जो अधिक रचनात्मक तरीकों से अटके हुए हैं, जिनके प्रवेश ने उनके द्वारा उपयोग की जाने वाली प्रणाली को कॉन्फ़िगर किया है।

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

जून 2019 तक स्पष्ट लिनक्स पर समान, सरल परिदृश्य के लिए यहां अंतिम मजाक के लिए:

ssh clearlinux
 └─ -bash # login shell
      ├── /usr/share/defaults/etc/profile
      |    ├─ /usr/share/defaults/etc/profile.d/*
      |    ├─ /etc/profile.d/*
      |    └─ /etc/profile
      ├── ~/.bash_profile
      |
      |
      └─  $ bash   # non-login shell
           ├─ /usr/share/defaults/etc/bash.bashrc
           |      ├─ /usr/share/defaults/etc/profile
           |      |    ├─ /usr/share/defaults/etc/profile.d/*
           |      |    ├─ /etc/profile.d/*
           |      |    └─ /etc/profile
           |      └─ /etc/profile
           └─ ~/.bashrc
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.