2012-04-25 15 views
15

मेरे पास कुछ बैश स्क्रिप्ट हैं जिन्हें मैं डिफ़ॉल्ट रूप से रन बनाना चाहता हूं और मैं वर्तमान में उन्हें अपने मैक पर ~/.profile में संग्रहीत कर रहा हूं। क्या यह गलत जगह उन्हें स्टोर करने के लिए है? मैंने दूसरों के बारे में सुना है और उन्हें कोशिश की है (जैसे ~/.bashrc, ~/.bash_profile, आदि), लेकिन वे काम नहीं कर रहे हैं।सेटिंग्स को प्राप्त करने के लिए मुझे `स्रोत ~/.profile` का उपयोग क्यों करना है?

इनमें से सभी के बीच क्या अंतर है और मैं स्क्रिप्ट को किस पर रखता हूं ताकि यह रनटाइम पर कॉन्फ़िगर हो और मुझे हर बार टर्मिनल खोलने पर $ source ~/.profile पर कॉल करने की आवश्यकता नहीं है?

+0

यह भी देखें http://stackoverflow.com/questions/415403/whats-the-difference-between-bashrc-bash-profile-and-environment – Nakilon

उत्तर

7
     +-----------------+ 
        |     | 
interactive shell -->| ~/.bashrc  | 
        |     | 
        +-----------------+ 

interactive shell स्वचालित रूप से स्रोत होगा ~/.bashrc

समस्या मैं इन को सुधारने के लिए किया Should the .bashrc in the home directory load automatically?

+0

मैं इसे आजमाउंगा। लॉगिन खोल और दूसरों के बीच क्या अंतर है? – locoboy

+1

एक इंटरैक्टिव खोल वह है जिसे आप टर्मिनल के अंदर चलाते हैं; यही है, दोनों टर्मिनल फ़ाइल डिस्क्रिप्टर को stdin और stdout बिंदु। आपके द्वारा काम किए जाने वाले 99% गोले एक इंटरैक्टिव खोल के रूप में चलाए जाएंगे। –

+0

मैं कैसे सुनिश्चित कर सकता हूं कि मैं इंटरैक्टिव चला रहा हूं और दूसरा नहीं? ऐसा लगता है जैसे मैं एक और चला रहा हूँ। – locoboy

2

बैश के विभिन्न सेटअप स्वचालित रूप से उनकी कॉन्फ़िगरेशन के आधार पर अलग-अलग फ़ाइलों को स्रोत करेंगे। लगभग सार्वभौमिक फ़ाइल जो हमेशा सोर्स की जाती है ~/.bashrc है - यह एक बैश कोर चीज है जो यह इस फ़ाइल को लोड करेगी। उस फ़ाइल में, आपको अपनी लाइन source ~/.profile पर जोड़नी चाहिए और आपको जाना अच्छा होगा!

-Edit-

मेरी लिनक्स और अपने साथी के मैक से:

$ echo "echo hello" >> ~/.profile 
$ echo "source ~/.profile" >> ~/.bashrc 
$ bash 
Hello 
$ 
+0

मैंने कोशिश की और यह अभी भी काम नहीं कर रहा है – locoboy

+0

मैंने समाधान को दोबारा जांच लिया एक सहयोगी के मैक पर, और पोस्ट किया। इस बिंदु पर, क्या आप अपनी मशीन पर क्या हो रहा है इसके बारे में कोई अंतर्दृष्टि प्रदान कर सकते हैं? यदि आप ls -l ~/.bashrc, ls -l ~/.profile, cat ~/.bashrc, cat ~/.profile –

+1

चला सकते हैं और पोस्ट कर सकते हैं। Bashrc केवल तब सोर्स किया जाता है जब खोल इंटरैक्टिव होता है और * लॉगिन नहीं * खोल। सम्मेलन द्वारा, .bashrc को '~/.bash_login' से बुलाया जाता है लेकिन यह आवश्यक नहीं है ... इसलिए आप .bashrc पर कॉल नहीं कर सकते हैं। @ केवी के पोस्ट में लिंक देखें। –

5

पर एक नज़र डालें:

cat .bash_profile >> .profile 
rm .bash_profile 

विकल्प है:

echo "source ~/.profile" >> .bash_profile 
7

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

https://www.gnu.org/s/bash/manual/html_node/Bash-Startup-Files.html:

एक इंटरैक्टिव लॉगिन शेल के रूप में लागू किया, या

--login बैश, या --login के साथ एक गैर-सहभागी शेल के रूप में एक इंटरैक्टिव लॉगिन शेल के रूप में लागू किया जाता है तो साथ विकल्प, यह फ़ाइल /etc/profile से कमांड को पहले पढ़ता है और निष्पादित करता है, अगर वह फ़ाइल मौजूद है। उस फ़ाइल को पढ़ने के बाद, यह उस क्रम में ~/.bash_profile, ~/.bash_login, और ~/.profile देखता है, और मौजूद पहले से कमांड को पढ़ता है और निष्पादित करता है और पठनीय है।

[...]

एक इंटरैक्टिव गैर लॉगिन खोल

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

~/.profile अन्य गोले द्वारा भी उपयोग किया जाता है।

टर्मिनल और आईटर्म डिफ़ॉल्ट रूप से लॉगिन गोले के रूप में नए गोले खोलते हैं (login -pf $USER जैसे कुछ निष्पादित करके), लेकिन कई जीएनयू/लिनक्स टर्मिनल एप्लिकेशन गैर-लॉगिन गोले के रूप में नए गोले खोलते हैं। ओएस एक्स उपयोगकर्ता ~/.bashrc के बजाय अक्सर ~/.bash_profile का उपयोग करते हैं।

2

अगर आप source ~/.profile अपने .bashrc में है कि आप बाहर टिप्पणी या किसी आदेशों को दूर (.profile में) कर सुनिश्चित करें कि कॉल करने के लिए या स्रोत अपने .profile में .bashrc या यह पाश हमेशा के लिए होगा और आपको एक संदेश मिलता मिल कभी नहीं होगा।

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