लिनक्स पर नए सत्र में 'प्रॉफ़ाइल' लोड नहीं कर रहा


22

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

मैं के माध्यम से खोल का उपयोग SSH : ssh myusername@remotemachine। मेरे पास इस पर व्यवस्थापक विशेषाधिकार हैं।


हमें अपने शेल को शुरू करने के लिए अपने कमांड का उपयोग करें।
निफले

जवाबों:


24

जब बैश एक इंटरेक्टिव लॉगिन शेल के रूप में शुरू होता है, तो इसमें से एक फाइल प्रक्रिया हो सकती है ~/.profile

जब यह एक इंटरैक्टिव नॉन-लॉगिन शेल के रूप में शुरू होता है तो यह नहीं होता है। यह प्रक्रिया करता है /etc/bash.bashrc(यदि वह फ़ाइल या इसी तरह की फ़ाइल बैश के संस्करण में सक्षम है) और ~/.bashrc

आप निम्नलिखित को अपने में जोड़ सकते हैं ~/.bashrc(लेकिन अनजाने में लूप या मूल्यों से सावधान रहें):

. $HOME/.profile

8
यदि आप अपने .bashrc स्रोत को अपने .profile (जो मैं अनुशंसा नहीं करते हैं) के लिए जा रहे हैं, तो आपके पास डबल सोर्सिंग के खिलाफ कुछ गार्ड होना चाहिए। कुछ संरक्षक चर या तो सेट करें [ -z "$SOME_VAR_SET_IN_PROFILE" ] && . ~/.profile
रिच होमोलका

2
हाँ, मैं वास्तव में इसकी सिफारिश नहीं करता हूँ।
अगली सूचना तक रोक दिया गया।

12
एक लॉगिन शैल ~ / .bash_profile, ~ / .bash_login और ~ / .profile क्रम में आज़माएगी और केवल पहली बार इसे खोजेगी।
बीनो

3
जैसा कि दूसरों ने कहा है, यह अनुशंसित नहीं है, क्योंकि प्रोफ़ाइल और "दोस्तों" (.bash_prof) के लिए सामान्य तरीका स्रोत .bashrc के लिए है, और दूसरे तरीके से नहीं। यह हो सकता है कि आपका टर्मिनल प्रोग्राम एक लॉगिन शेल नहीं है, लेकिन एक इंटरैक्टिव गैर-लॉगिन शेल है। अक्सर वहाँ एक वरीयता है जिसे आप सेट कर सकते हैं - इसे पाने के लिए। लॉगिन, .login और / या .bash_profile प्राप्त करने के लिए एक लॉग इन करें।
rholmes

15

यह इस बात पर निर्भर करता है कि आप अपना शेल कैसे शुरू करते हैं। जैसा कि अन्य लोगों ने कहा है, एक लॉगिन शेल आपकी प्रोफाइल को लोड करेगा (यह पहले .bash_profile की तलाश करेगा, फिर कोशिश करेगा। प्रॉफाइल करेगा)। यदि यह इनमें से एक को पाता है, तो यह उन्हें लोड करता है। एक गैर-लॉगिन शेल (या तो इंटरैक्टिव या गैर-इंटरैक्टिव) स्रोत .bashrc होगा।

मैं सब कुछ .bashrc में डालने का सुझाव दूंगा। .Profile / .bashrc विभाजन मनमानी की तरह था और UNIX के पुराने दिनों में और अधिक समझ में आता था जब tty सिर्फ एक डिवाइस का नाम नहीं था और इसका मतलब एक वास्तविक टेली टाइप था। यह कुछ चीजों को शुरू करने के लिए था (जैसे मेल की जाँच करना) एक सर्वर के 'मुख्य' लॉगिन पर, और अन्य गोले के लिए सामान्य सेटअप सामान। अधिकांश लिनक्स में अब आप लॉग इन करेंगे, आप वास्तव में एक शेल में प्रवेश नहीं कर रहे हैं, जैसा कि आप कुछ ग्राफिकल इंटरफ़ेस (केडीई, सूक्ति, सीडीई 'कंपकंपी) में लॉग इन कर रहे हैं। "स्पॉन लॉगिन प्रक्रिया" का अब आपके सत्र प्रबंधक द्वारा ध्यान रखा जाता है। यह अब बहुत कम प्रासंगिक है।

मेरा सुझाव है: अपने .profile पूरी तरह से मिलकर बनाओ:

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

.bashrc की पहली पंक्ति के रूप में, अजीब सामग्री के खिलाफ गार्ड जब जल्दी से कूद कर एक बैश स्क्रिप्ट चला रहा हो:

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

5
.profileबैश अज्ञेय को रखा जाना चाहिए। मैं .bash_profileलोड करने .profileऔर फिर लोड करने के लिए कॉन्फ़िगर करने का सुझाव देता हूं .bashrc। केवल बैश अज्ञेय सामान .profile, जैसे PATHऔर LC_*सामान रखें। बाकी को अंदर डालें .bashrc
२०:०१ में

@Rich Homolka आपकी कमान में दो बार [-f $ HOME / .bashrc] क्यों है? कैसे कमांड है जिसे आपने अभी-अभी पोस्ट किया है '। $ घर / .bashrc '?
डेविड डोरिया

1
Protip: अपने .bashrc में कुछ भी मत डालो जो stdout या stderr को लिखता है, जैसे कि एससीपी जैसी चीजों के लिए गैर-इंटरैक्टिव क्लाइंट को तोड़ सकता है। आउटपुट के साथ चीजें (उदाहरण के लिए, मुझे एक भाग्य कुकी और अपटाइम के साथ अभिवादन करना पसंद है) केवल
ब्रायन ए हेनिंग

@ लोटेराक्स सच। हमारे पास एक मानक-ईश kshrc था जो कि stdout को निर्यात किया गया, Xserver को तोड़ दिया (हमिंगबर्ड से अधिक)
रिच होमोलका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.