अगर मैं इसमें बदलाव .bashrcकरता हूं, तो मैं इसे बिना लॉग आउट किए कैसे वापस लोड कर सकता हूं?
अगर मैं इसमें बदलाव .bashrcकरता हूं, तो मैं इसे बिना लॉग आउट किए कैसे वापस लोड कर सकता हूं?
जवाबों:
आपको बस कमांड दर्ज करनी है:
source ~/.bashrc
या आप कमांड के छोटे संस्करण का उपयोग कर सकते हैं:
. ~/.bashrc
alias editbashrc='vim ~/.bashrc; source ~/.bashrc':। यह संपादन को बहुत आसान बना देगा, क्योंकि आपको रिआयडिंग के बारे में सोचने की जरूरत नहीं है, अगर कस्टम रिवाज़ का उपयोग करते हुए, संपादन करने के बाद।
या आप उपयोग कर सकते हैं:
exec bash
यह वही काम करता है, और याद रखना आसान है (कम से कम मेरे लिए)।
execआदेश पूरी तरह से निर्दिष्ट कमांड लाइन चलाकर खोल प्रक्रिया बदल देता है। हमारे उदाहरण में, यह जो भी मौजूदा शेल bash( ताज़ा कॉन्फ़िगरेशन फ़ाइलों के साथ) का ताज़ा उदाहरण है, उसे बदल देता है ।
source .bashrcआदेश का अंतर समझा सकते हैं और exec bash?
sourceएक अंतर्निहित शेल कमांड है जो वर्तमान शेल में तर्क के रूप में पारित फ़ाइल की सामग्री को निष्पादित करता है । तो आपके उदाहरण में, यह चालू शेल में .bashrc फ़ाइल को निष्पादित करता है। और execकमांड शेल को दिए गए प्रोग्राम के साथ बदल देता है, आपके उदाहरण में, यह आपके शेल को बैश (अपडेटेड कॉन्फ़िगरेशन फ़ाइलों के साथ) के साथ बदल देता है
. ~/.bashrcइसके dashबजाय निष्पादित करेगा bash, इसलिए एक त्रुटि है क्योंकि shoptगायब है। sourceशेल से नहीं मिला है, ताकि समाधान के रूप में अच्छी तरह से बाहर है। मैंने यह करने की कोशिश की और docker की छवि सुचारू रूप से बनी!
source ~/.bashrcआपके पूरे शेल वातावरण (हालांकि सोर्सिंग द्वारा संशोधित होने की संभावना ~/.bashrc) exec bashको संरक्षित करेगा , जबकि केवल आपके वर्तमान शेल के पर्यावरण चर (शेल चरों, फ़ंक्शन, विकल्प खो जाने के मामले में वर्तमान शेल में कोई भी तदर्थ परिवर्तन) को संरक्षित करेगा । आपकी आवश्यकताओं के आधार पर, एक या दूसरे दृष्टिकोण को प्राथमिकता दी जा सकती है।
exec bash। execआदेश की जगह हमारे मामले, बैश में, इस कार्यक्रम के साथ खोल। इसलिए, टर्मिनल में अस्तित्व में बैश का हमेशा एक उदाहरण होता है।
करने के लिए पूरक हैं और विपरीत दो सबसे लोकप्रिय जवाब, . ~/.bashrcऔर exec bash:
दोनों समाधान प्रभावी रूप से पुनः लोड होते हैं ~/.bashrc, लेकिन अंतर हैं:
. ~/.bashrcया आपके वर्तमान शेलsource ~/.bashrc को संरक्षित करेगा :
~/.bashrc(वर्तमान खोल में सोर्सिंग ) बना देता है, वर्तमान खोल और अपने राज्य कर रहे हैं संरक्षित है, जो वातावरण चर, खोल चर, खोल विकल्प, खोल काम करता है, और आदेश इतिहास भी शामिल है।exec bash, या, और अधिक मजबूती से, exec "$BASH"[1] , आपके वर्तमान शेल को एक नए उदाहरण के साथ बदल देगा , और इसलिए केवल आपके वर्तमान शेल के पर्यावरण चर (उन लोगों को शामिल करता है, जिन्हें आपने एड-हॉक परिभाषित किया है)।
आपकी आवश्यकताओं के आधार पर, एक या दूसरे दृष्टिकोण को प्राथमिकता दी जा सकती है।
[1] exec bashसिद्धांत रूप में मौजूदा शेल शुरू करने वाले की तुलना में एक अलग bash निष्पादन योग्य निष्पादित कर सकता है , अगर ऐसा होता है कि पहले से सूचीबद्ध एक निर्देशिका में मौजूद है $PATH। चूंकि विशेष चर में $BASHहमेशा निष्पादन योग्य का पूरा पथ होता है जो वर्तमान शेल को शुरू करता है, उसी निष्पादन योग्य exec "$BASH"का उपयोग करने की गारंटी है ।
एक नोट फिर से चारों ओर : डबल-कोटिंग सुनिश्चित करता है कि चर मूल्य का उपयोग बश द्वारा व्याख्या के बिना, के रूप में किया जाता है; यदि मान में कोई एम्बेडेड स्थान या अन्य शेल मेटाचैकर नहीं है (जो इस मामले में संभावना नहीं है), तो आपको कड़ाई से दोहरे उद्धरण चिह्नों की आवश्यकता नहीं है, लेकिन उनका उपयोग करना एक अच्छी आदत है।"..."$BASH
exec $BASHस्रोत होगा ~/.bashrc, इसलिए आप नए सत्र में शेल पर्यावरण में इसके परिवर्तन देखेंगे।
किसी ने गलत अंग्रेजी को जोड़ने के लिए मेरे उत्तर को संपादित किया, लेकिन यहां मूल था, जो स्वीकृत उत्तर से हीन है।
. .bashrc
~/, लेकिन चूंकि शीर्ष उत्तर दोनों दिखाता है source ~/.bashrcऔर . ~/.bashrcमुझे आश्चर्य है कि क्या यह उत्तर केवल अनावश्यक के रूप में हटा दिया जाना चाहिए।
आपके वातावरण के आधार पर, बस टाइपिंग
bash
काम भी कर सकते हैं।
. ~/.bashrc
source ~/.bashrc
exec bash
execकमांड किसी दिए गए प्रोग्राम के साथ शेल को बदलता है ... - WhoSayIn
exec bashअभी भी वर्तमान शेल का वातावरण विरासत में मिला है। exec env -i bashकरीब होगा (या exec env -i bash -lयदि आप वर्तमान में लॉगिन शेल में हैं)।
अपने वातावरण के आधार पर, आप 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 में किसी भी पथ / स्क्रिप्ट को लोड करना चाहिए।
मैंने अपने 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वास्तव में आपके द्वारा बनाया गया नया उपयोगकर्ता नाम है, और अब लॉगिन करें) पर स्थित था
निष्पादित बैश वर्तमान को बदलने के लिए एक नए शेल को फिर से निष्पादित करने और लॉन्च करने का एक शानदार तरीका है। जवाब में जोड़ने के लिए, $ शेल वर्तमान शेल को वापस करता है जो बैश है। निम्नलिखित का उपयोग करके, यह वर्तमान शेल को पुनः लोड करेगा, और न केवल बैश करने के लिए।
exec $SHELL -l;
जब मैं पाथ बदलता हूं तो मेरे लिए क्या काम करता है: exec "$BASH" --login
~/.bashrc, जो (सीधे) लोड नहीं--login होगा ; एक उपयोगकर्ता स्तर पर, इसके बजाय इसे पुनः लोड ( या ) करेंगे । ~/.bash_profile~/.bash_login~/.profile
मैं msysgit पर निम्न कमांड का उपयोग करता हूं
. ~/.bashrc
का छोटा संस्करण
source ~/.bashrc
एक इंटरैक्टिव शेल को मानते हुए, और आप अपना वर्तमान कमांड इतिहास रखना चाहते हैं और / etc / प्रोफ़ाइल (जिसमें / etc / bashrc सहित पर्यावरण डेटा लोड करते हैं) और /etc/paths.d/ के माध्यम से Mac OS X लोड पथों पर लोड करते हैं path_helper), अपने कमांड इतिहास को जोड़ें और लॉगिन ('-l') विकल्प के साथ बैश का निष्पादन करें:
history -a && exec bash -l
मैंने देखा कि शुद्ध exec bashकमांड पर्यावरण चर को संरक्षित करेगा, इसलिए आपको उपयोग करने की आवश्यकता हैexec -c bash खाली वातावरण में बैश चलाने के करने की है।
उदाहरण के लिए, आप एक bash लॉगिन करते हैं, और export A=1, यदि आप exec bash, दA == 1 ।
यदि आप exec -cl bash,A खाली हैं।
मुझे लगता है कि यह आपके काम करने का सबसे अच्छा तरीका है।
मैं व्यक्तिगत रूप से है
alias ..='source ~/.bashrc'
मेरे bashrc में, ताकि मैं इसे पुनः लोड करने के लिए ".." का उपयोग कर सकूं।
..एक उपनाम के रूप में उपयोग करते हैं cd .., इसलिए यह बहुत भ्रामक होगा।
alias rehash='source ~/.bashrc'मेरी पसंद है
export PATH=$PATH:fooऔर फिर आप इसे बदल देते हैंexport PATH=$PATH:bar। यदि आप लॉग इन और बैक आउट करते हैं, तो केवलbarPATH में होगा, लेकिन यदि आप जो सुझाव देते हैं, वही करते हैंfooऔर दोनोंbarही PATH में होंगे। क्या आप इसके आस-पास का रास्ता जानते हैं?