अगर मैं इसमें बदलाव .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
। यदि आप लॉग इन और बैक आउट करते हैं, तो केवलbar
PATH में होगा, लेकिन यदि आप जो सुझाव देते हैं, वही करते हैंfoo
और दोनोंbar
ही PATH में होंगे। क्या आप इसके आस-पास का रास्ता जानते हैं?