मैं लॉग आउट किए बिना .bashrc पुनः लोड कैसे करूं और वापस अंदर जाऊं?


1641

अगर मैं इसमें बदलाव .bashrcकरता हूं, तो मैं इसे बिना लॉग आउट किए कैसे वापस लोड कर सकता हूं?

जवाबों:


2633

आपको बस कमांड दर्ज करनी है:

source ~/.bashrc

या आप कमांड के छोटे संस्करण का उपयोग कर सकते हैं:

. ~/.bashrc

88
यह लॉग इन और बैक आउट के समान नहीं है। मान लें कि आपके पास .bashrc में निम्न पंक्ति है: export PATH=$PATH:fooऔर फिर आप इसे बदल देते हैं export PATH=$PATH:bar। यदि आप लॉग इन और बैक आउट करते हैं, तो केवल barPATH में होगा, लेकिन यदि आप जो सुझाव देते हैं, वही करते हैं fooऔर दोनों barही PATH में होंगे। क्या आप इसके आस-पास का रास्ता जानते हैं?
HighCommander4 1

7
@ HighCommander4 - आप जो करना चाहते हैं उसे करने के लिए एक बहुत ही असंतोषजनक तरीका है "बैश-एल" हालांकि यह वास्तव में एक नया उप-समूह बनाता है और जब आप लॉगआउट करते हैं तो आप एनक्लोजिंग शेल पर लौट आएंगे जहां "फू" अभी भी पैट में है। यदि आप केवल PATH में रुचि रखते हैं, तो आप "PATH को अनसेट" कर सकते हैं और इसे स्क्रैच से फिर से संगठित कर सकते हैं, लेकिन शायद आसान / सुरक्षित है कि आप अपने .bashrc को सोर्स करने से पहले "PATH = / bin: / usr / bin" करें। PATH वैरिएबल लॉगिन पर कैसे बनाया जाता है, वास्तव में काफी जटिल होता है, जिसमें लॉगिन से बहुत कम से कम इनपुट शामिल होता है (देखें "man login") और / etc / प्रोफाइल ("man bash" देखें)।
जॉर्ज हॉकिन्स

2
@ आप इसे ~ / .bashrc में ~ / .bash_profile में जोड़कर इसे स्वचालित कर सकते हैं, हालांकि मुझे नहीं पता कि यह एक अच्छा अभ्यास है या नहीं।
विवेक गनी

4
मैं एक उपनाम बनाने की भी सिफारिश करूंगा (जिसे आप ~ / .bashrc या ~ / .bash_ali में स्टोर कर सकते हैं) जो .bashrc को खोलता है, और संपादक के बाहर निकलने के बाद इसे फिर से लोड करता है। आप एक उपनाम में दो आदेशों को जोड़कर ऐसा कर सकते हैं, उदाहरण के लिए ऐसा (यदि विम आपके पसंदीदा संपादक हैं, तो इसे किसी और चीज़ पर स्वैप करें) alias editbashrc='vim ~/.bashrc; source ~/.bashrc':। यह संपादन को बहुत आसान बना देगा, क्योंकि आपको रिआयडिंग के बारे में सोचने की जरूरत नहीं है, अगर कस्टम रिवाज़ का उपयोग करते हुए, संपादन करने के बाद।
सैमुअल लम्पा

6
यह केवल वर्तमान टर्मिनल को प्रभावित करेगा ।
matepal297

283

या आप उपयोग कर सकते हैं:

exec bash

यह वही काम करता है, और याद रखना आसान है (कम से कम मेरे लिए)।

execआदेश पूरी तरह से निर्दिष्ट कमांड लाइन चलाकर खोल प्रक्रिया बदल देता है। हमारे उदाहरण में, यह जो भी मौजूदा शेल bash( ताज़ा कॉन्फ़िगरेशन फ़ाइलों के साथ) का ताज़ा उदाहरण है, उसे बदल देता है ।


13
क्या आप कृपया source .bashrcआदेश का अंतर समझा सकते हैं और exec bash?
मुरादीन

18
@muradin, sourceएक अंतर्निहित शेल कमांड है जो वर्तमान शेल में तर्क के रूप में पारित फ़ाइल की सामग्री को निष्पादित करता है । तो आपके उदाहरण में, यह चालू शेल में .bashrc फ़ाइल को निष्पादित करता है। और execकमांड शेल को दिए गए प्रोग्राम के साथ बदल देता है, आपके उदाहरण में, यह आपके शेल को बैश (अपडेटेड कॉन्फ़िगरेशन फ़ाइलों के साथ) के साथ बदल देता है
WhoSayIn

3
मेरी अति विशिष्ट परिस्थिति में, यह पूरी तरह से हिल गया। मेरा डॉकफ़ाइल एक स्थापित स्क्रिप्ट निष्पादित करता है जो .bashrc को संशोधित करता है। मुझे फिर से लोड करने की आवश्यकता है, लेकिन . ~/.bashrcइसके dashबजाय निष्पादित करेगा bash, इसलिए एक त्रुटि है क्योंकि shoptगायब है। sourceशेल से नहीं मिला है, ताकि समाधान के रूप में अच्छी तरह से बाहर है। मैंने यह करने की कोशिश की और docker की छवि सुचारू रूप से बनी!
m59

9
सुरुचिपूर्ण, लेकिन "वही काम करता है" पूरी तरह से सही नहीं है। source ~/.bashrcआपके पूरे शेल वातावरण (हालांकि सोर्सिंग द्वारा संशोधित होने की संभावना ~/.bashrc) exec bashको संरक्षित करेगा , जबकि केवल आपके वर्तमान शेल के पर्यावरण चर (शेल चरों, फ़ंक्शन, विकल्प खो जाने के मामले में वर्तमान शेल में कोई भी तदर्थ परिवर्तन) को संरक्षित करेगा । आपकी आवश्यकताओं के आधार पर, एक या दूसरे दृष्टिकोण को प्राथमिकता दी जा सकती है।
mklement0

12
@SEoF, जब आप कहते हैं "बैश इंसेप्शन" और अगर आप सोच रहे हैं कि मुझे क्या लगता है कि आप सोच रहे हैं, तो मुझे कहना होगा कि आप गलत हैं। फिल्म के विपरीत, आप बार-बार करने पर बैश से टकराते नहीं रहते exec bashexecआदेश की जगह हमारे मामले, बैश में, इस कार्यक्रम के साथ खोल। इसलिए, टर्मिनल में अस्तित्व में बैश का हमेशा एक उदाहरण होता है।
जॉन रेड

121

करने के लिए पूरक हैं और विपरीत दो सबसे लोकप्रिय जवाब, . ~/.bashrcऔर exec bash:

दोनों समाधान प्रभावी रूप से पुनः लोड होते हैं ~/.bashrc, लेकिन अंतर हैं:

  • . ~/.bashrcया आपके वर्तमान शेलsource ~/.bashrc को संरक्षित करेगा :

    • संशोधनों कि पुन: लोड के अलावा ~/.bashrc(वर्तमान खोल में सोर्सिंग ) बना देता है, वर्तमान खोल और अपने राज्य कर रहे हैं संरक्षित है, जो वातावरण चर, खोल चर, खोल विकल्प, खोल काम करता है, और आदेश इतिहास भी शामिल है।
  • exec bash, या, और अधिक मजबूती से, exec "$BASH"[1] , आपके वर्तमान शेल को एक नए उदाहरण के साथ बदल देगा , और इसलिए केवल आपके वर्तमान शेल के पर्यावरण चर (उन लोगों को शामिल करता है, जिन्हें आपने एड-हॉक परिभाषित किया है)।

    • दूसरे शब्दों में: शेल चर, शेल फ़ंक्शन, शेल विकल्प, कमांड इतिहास के संदर्भ में वर्तमान शेल में कोई भी तदर्थ परिवर्तन होता है।

आपकी आवश्यकताओं के आधार पर, एक या दूसरे दृष्टिकोण को प्राथमिकता दी जा सकती है।


[1] exec bashसिद्धांत रूप में मौजूदा शेल शुरू करने वाले की तुलना में एक अलग bash निष्पादन योग्य निष्पादित कर सकता है , अगर ऐसा होता है कि पहले से सूचीबद्ध एक निर्देशिका में मौजूद है $PATH। चूंकि विशेष चर में $BASHहमेशा निष्पादन योग्य का पूरा पथ होता है जो वर्तमान शेल को शुरू करता है, उसी निष्पादन योग्य exec "$BASH"का उपयोग करने की गारंटी है । एक नोट फिर से चारों ओर : डबल-कोटिंग सुनिश्चित करता है कि चर मूल्य का उपयोग बश द्वारा व्याख्या के बिना, के रूप में किया जाता है; यदि मान में कोई एम्बेडेड स्थान या अन्य शेल मेटाचैकर नहीं है (जो इस मामले में संभावना नहीं है), तो आपको कड़ाई से दोहरे उद्धरण चिह्नों की आवश्यकता नहीं है, लेकिन उनका उपयोग करना एक अच्छी आदत है।
"..."$BASH


मेरे पूछने से पहले आपने मेरे सवाल का जवाब दिया। यह जानकर अच्छा लगता है; मैं अक्सर एक ही सत्र के लिए अपनी कक्षा निर्धारित करता हूं।
स्वाइनफिश

यहां तक ​​कि अगर मैं "$ BASH" को निष्पादित करता हूं, तो वे चर जो .bashrc सेट को खोलते हैं, जो मैं अगले खोल दूंगा (मेरे वर्तमान सत्र के समान निष्पादन योग्य का उपयोग करके)?
नाइट्रिन 708

2
@ nitinr708: हाँ, exec $BASHस्रोत होगा ~/.bashrc, इसलिए आप नए सत्र में शेल पर्यावरण में इसके परिवर्तन देखेंगे।
mklement0

@ गेमिंग 32, मैं एक हाइपर-लिंक फुटनोट के विचार की सराहना करता हूं, लेकिन यह वास्तव में काम नहीं करता था (एक उत्तर में यह जितना छोटा है, यह उतना महत्वपूर्ण नहीं है)।
mklement0

44

किसी ने गलत अंग्रेजी को जोड़ने के लिए मेरे उत्तर को संपादित किया, लेकिन यहां मूल था, जो स्वीकृत उत्तर से हीन है।

. .bashrc

25
यह केवल तभी काम करेगा जब आपकी वर्तमान निर्देशिका वास्तव में आपकी घरेलू निर्देशिका होगी। निम्नलिखित काम करेगा: ~ / .बशेक
ब्रायन शॉल्डर

6
यह क्या काम करता है? जब मैं करता हूं तो वास्तव में क्या हो रहा है ".bashrc"? धन्यवाद!
जेड डैनियल्स

54
। "स्रोत" बिलिन कमांड के लिए एक बैश शॉर्टकट है। तो ".bashrc" BASH दुभाषिया के लिए "स्रोत .bashrc" के समान है।
ब्रायन शॉल्डर

7
ठंडा। धन्यवाद। अब जब मुझे पता नहीं था।
जेड डैनियल्स

2
मैंने सिर्फ जोड़ने के लिए एक संपादन अनुरोध सबमिट किया है ~/, लेकिन चूंकि शीर्ष उत्तर दोनों दिखाता है source ~/.bashrcऔर . ~/.bashrcमुझे आश्चर्य है कि क्या यह उत्तर केवल अनावश्यक के रूप में हटा दिया जाना चाहिए।
मैक्स गनीस डे

18

आपके वातावरण के आधार पर, बस टाइपिंग

bash

काम भी कर सकते हैं।


15
हालांकि, यह मौजूदा एक के भीतर एक नए शेल का आह्वान करेगा, इस प्रकार संसाधनों को बर्बाद करना। बेहतर उपयोग @ WhoSayln का निष्पादन समाधान जो नए शेल के साथ वर्तमान शेल को बदलता है।
बर्नहार्ड वैगनर

हाँ बस स्रोत का उपयोग करें। यह पूरी तरह से अनावश्यक और कष्टप्रद है।
dylnmc

@ बर्नहार्ड
वैगनर

यह अच्छा समाधान है जिससे उपयोगकर्ता विशेषाधिकार तक सीमित है।
टुंडे पिज्ज़ल

एक उपप्रकार को लागू करने से जटिलता की एक परत जुड़ जाती है जिसका कोई अतिरिक्त मूल्य नहीं है।
एलन बेरेसिन

18

इसके साथ, आपको "स्रोत ~ / .bashrc" लिखना भी नहीं होगा :

अपनी bashrc फ़ाइल शामिल करें:

alias rc="vim ~/.bashrc && source ~/.bashrc"

हर बार जब आप अपने bashrc को संपादित करना चाहते हैं, तो बस उपनाम " rc " चलाएं


15
. ~/.bashrc

. POSIX- अनिवार्य बिलिन है


वैकल्पिक

source ~/.bashrc

source.bash में dot / period का पर्यायवाची है , लेकिन POSIX sh में नहीं, इसलिए अधिकतम अनुकूलता के लिए अवधि का उपयोग करें।

exec bash
  • execकमांड किसी दिए गए प्रोग्राम के साथ शेल को बदलता है ... - WhoSayIn

2
exec bashअभी भी वर्तमान शेल का वातावरण विरासत में मिला है। exec env -i bashकरीब होगा (या exec env -i bash -lयदि आप वर्तमान में लॉगिन शेल में हैं)।
चेपनर

5

अपने वातावरण के आधार पर, आप SSH सत्र खोलते समय अपने पास .bashrc लोड करने के लिए स्क्रिप्टिंग जोड़ना चाह सकते हैं। मैंने हाल ही में उबंटू में चल रहे एक सर्वर पर माइग्रेशन किया, और वहाँ .profile, not .bashrc या .bash_profile को डिफ़ॉल्ट रूप से लोड किया गया है। .Bashrc में किसी भी स्क्रिप्ट को चलाने के लिए, मुझे दौड़ना होगाsource ~/.bashrc हर बार एक सत्र खोलने के लिए दौड़ना पड़ता था, जो रिमोट डिपो चलाने पर मदद नहीं करता है।

सत्र खोलते समय अपने .bashrc लोड को स्वचालित रूप से करने के लिए, इसे .profile में जोड़ने का प्रयास करें:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

अपने सत्र को फिर से खोलें, और इसे आपके पास .bashrc में किसी भी पथ / स्क्रिप्ट को लोड करना चाहिए।


मेरे पास ".profile" में यह है, लेकिन यह काम नहीं कर रहा है - हर बार जब मैं बाहर निकलता हूं, तो मुझे इसे हाथ से करना होगा। कोई सुझाव?
वेन स्मॉलमैन

4

मैंने अपने vultr क्लाउड आधारित सर्वर को सेट करने के लिए easyengine का उपयोग किया।
मुझे मेरी बैश फाइल मिली /etc/bash.bashrc

तो source /etc/bash.bashrcमेरे लिए चाल चली गई!

अपडेट करें

एक नंगे सर्वर (ubuntu 16.04) की स्थापना करते समय, आप उपरोक्त जानकारी का उपयोग कर सकते हैं, जब आपने अभी तक उपयोगकर्ता नाम नहीं बनाया है, और रूट के माध्यम से लॉग इन कर रहे हैं।

उपयोगकर्ता (sudo privledges के साथ) बनाने के लिए सबसे अच्छा है, और इस उपयोगकर्ता नाम के बजाय लॉगिन करें।
यह आपकी सेटिंग्स के लिए एक निर्देशिका बनाएगा, जिसमें .profile और .bashrc फाइलें शामिल हैं।
https://linuxize.com/post/how-to-create-a-sudo-user-on-ubuntu/

अब, आप ~/.bashrcफ़ाइल को (और "स्रोत") संपादित करेंगे ।

मेरे सर्वर पर, यह /home/your_username/.bashrc
(जहां your_usernameवास्तव में आपके द्वारा बनाया गया नया उपयोगकर्ता नाम है, और अब लॉगिन करें) पर स्थित था


4

निष्पादित बैश वर्तमान को बदलने के लिए एक नए शेल को फिर से निष्पादित करने और लॉन्च करने का एक शानदार तरीका है। जवाब में जोड़ने के लिए, $ शेल वर्तमान शेल को वापस करता है जो बैश है। निम्नलिखित का उपयोग करके, यह वर्तमान शेल को पुनः लोड करेगा, और न केवल बैश करने के लिए।

exec $SHELL -l;


3

जब मैं पाथ बदलता हूं तो मेरे लिए क्या काम करता है: exec "$BASH" --login


सवाल फिर से लोड करने के बारे में है ~/.bashrc, जो (सीधे) लोड नहीं--login होगा ; एक उपयोगकर्ता स्तर पर, इसके बजाय इसे पुनः लोड ( या ) करेंगे । ~/.bash_profile~/.bash_login~/.profile
21 दिसंबर को mklement0

3

प्रकार:

source ~/.bashrc

या, छोटे रूप में:

. ~/.bashrc


1
फिर, केवल तभी काम करता है जब आप होम डायरेक्टरी में हों, या अधिक सटीक रूप से, उस डाइरेक्टरी में जहाँ .bashrcस्थित है। ऐसा करने का एक अधिक सही तरीका, जैसा कि स्वीकृत उत्तर में बताया गया है, है source ~/.bashrc
जॉन रेड

2

मैं msysgit पर निम्न कमांड का उपयोग करता हूं

. ~/.bashrc

का छोटा संस्करण

source ~/.bashrc

@jwg स्वीकृत उत्तर है। .Bashrc। केवल तभी काम करेंगे जब आप होम डायरेक्टरी में msysgit पर हों।
सोजन वी जोस

@jwg ok i thin मैं उल्लेख कर रहा था कि आपको छोटे संस्करण का उपयोग करने के बजाय 'स्रोत ~ / .bashrc' टाइप करने की आवश्यकता नहीं है।
सोजन वी जोस

@jwg ओके मैंने इसे मूल उत्तर के रूप में संपादित किया :)
सोजान वी जोस

क्यों बेमानी जवाब @Sojan?
नाइट्रिन 708

@ nitinr708 2014 मुझे मुश्किल से याद है: पी। मूल उत्तर को बाद में मैंने कुछ अनुमान लगाया था।
सोजन वी जोस

2

एक इंटरैक्टिव शेल को मानते हुए, और आप अपना वर्तमान कमांड इतिहास रखना चाहते हैं और / etc / प्रोफ़ाइल (जिसमें / etc / bashrc सहित पर्यावरण डेटा लोड करते हैं) और /etc/paths.d/ के माध्यम से Mac OS X लोड पथों पर लोड करते हैं path_helper), अपने कमांड इतिहास को जोड़ें और लॉगिन ('-l') विकल्प के साथ बैश का निष्पादन करें:

history -a && exec bash -l

1

यह भी चलेगा ।।

cd ~
source .bashrc

7
यह करता है, लेकिन यह कामकाजी निर्देशिका को ~ में भी बदल देता है, जो नहीं चाहता है।
अल्बिन

1
संदर्भ को जीवित रखने के लिए धन्यवाद @Krinkle
nitinr708

क्या ~उपयोगकर्ता होम निर्देशिका में कार्य निर्देशिका को बदलना आवश्यक है ?
केनली

1

मैंने देखा कि शुद्ध exec bashकमांड पर्यावरण चर को संरक्षित करेगा, इसलिए आपको उपयोग करने की आवश्यकता हैexec -c bash खाली वातावरण में बैश चलाने के करने की है।

उदाहरण के लिए, आप एक bash लॉगिन करते हैं, और export A=1, यदि आप exec bash, दA == 1

यदि आप exec -cl bash,A खाली हैं।

मुझे लगता है कि यह आपके काम करने का सबसे अच्छा तरीका है।


-2

मैं व्यक्तिगत रूप से है

alias ..='source ~/.bashrc'

मेरे bashrc में, ताकि मैं इसे पुनः लोड करने के लिए ".." का उपयोग कर सकूं।


4
कई लोग इसके लिए ..एक उपनाम के रूप में उपयोग करते हैं cd .., इसलिए यह बहुत भ्रामक होगा।
द गॉडफादर

उपनाम के अलावा एक अच्छा विचार है। alias rehash='source ~/.bashrc'मेरी पसंद है
फ्रैंक नॉक

"_rs" जैसी किसी चीज़ का उपयोग करें जिसे मैं पुनः लोड शेल के रूप में उपयोग करता हूं। मैं अपने उपनाम की शुरुआत के लिए बहुत अधिक _ का उपयोग करता हूं; जो जेएस लिबास अंडरस्कोर या लॉश के समान है।
जिम्मी एमजी लिम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.