/ etc / प्रोफ़ाइल को सॉर्ट नहीं किया जा रहा है


45

11.04 के लिए, मैंने अपने सिस्टम की एक नई स्थापना की। उस अधिष्ठापन का एक भाग rvm को स्थापित करने के लिए था , जो एक rvm.shमें चिपक जाता है /etc/profile.d/। यह काम नहीं करता है /etc/profile(जो प्रत्येक + आर को लोड करता है /etc/profile.d/*.sh) लोड नहीं किया जा रहा है। दस्तावेज़ीकरण के अनुसार, प्रोफ़ाइल केवल खट्टा है अगर लॉगिन में बैश चलाया जाता है। इसे सत्यापित करने के लिए, मैंने चालान किया bash --login, जिसके बाद rvmयह उपलब्ध था।

इसने मेरे लिए उबंटू के पिछले संस्करणों में बिना किसी विन्यास के काम किया है। यही है, 10.10 की एक ताजा स्थापना सही ढंग से स्रोत प्रोफ़ाइल / .d होगी।

मेरा सवाल यह है: क्या मैं कुछ गलत कर रहा हूं, या क्या नैटी में कुछ नई धारणाएं बन रही हैं जिन्होंने इसे तोड़ा है? मेरा वर्तमान वर्कअराउंड source /etc/profileअंदर है ~/.bashrc(जो कि भयावह है क्योंकि प्रोफ़ाइल को bashrc's से पहले लोड करने के लिए है, लेकिन यह ट्रिक है)।

जवाबों:


52

डिफ़ॉल्ट रूप से, गनोम-टर्मिनल लॉगिन शेल के रूप में बैश शुरू नहीं करता है (मुझे लगता है कि आप मतलब है कि गनोम-टर्मिनल के अंदर शुरू किए गए बैश)। इसका मतलब है कि बैश नहीं पढ़ा जाएगा /etc/profileया ~/.profile। जैसा कि आपने सही तरीके से देखा है, बैश उन फ़ाइलों को पढ़ेगा यदि लॉगिन शेल के रूप में शुरू किया गया है।

आपकी समस्या का त्वरित समाधान गनोम-टर्मिनल को लॉगिन शेल के रूप में बैश शुरू करने के लिए कॉन्फ़िगर करना है ताकि यह पढ़े /etc/profile। ऐसा करने के लिए आपको संपादन मेनू से "गनोम-टर्मिनल" प्रोफ़ाइल प्राथमिकताएँ "पहुंच योग्य" रन कमांड को सक्षम करना होगा।

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

एक भी नहीं है सुपर उपयोगकर्ता पर सवाल-जवाब bashrc और प्रोफाइल के बीच अंतर के बारे में बात । अधिक जानकारी के लिए वहाँ पढ़ें।

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


'रन कमांड को एक लॉगिन शेल के रूप में सेट करना' वास्तव में लोड /etc/profile(और इस प्रकार .d) है। स्पष्टीकरण के लिए धन्यवाद - ऐसा लगता है कि इसे आरवीएम लोक के साथ पालन करना आवश्यक है।
मार्क

7
Ubuntu 11.04 पढ़ने /etc/profileऔर ~/.profileलॉगिन के दौरान नहीं लगता है । यह अजीब है क्योंकि यह हमेशा पुराने संस्करणों के साथ काम करता है। मुझे लगता है कि यह एक समाधान नहीं बल्कि एक समाधान है।
लुका

2
@lesmana क्या एक तरीका है जिससे मैं GUI के बजाय CLI से "रन कमांड को एक लॉगिन शेल के रूप में सक्षम" कर सकता हूं? मैं एक दूरस्थ सर्वर और स्थानीय रूप से X को आगे नहीं कर सकता।
वसीम

5

हालाँकि, एक फ़ाइल है /etc/bash.bashrc जो सूक्ति-टर्मिनल द्वारा पढ़ी जाती है और "इंटरैक्टिव बैश (1) गोले के लिए सिस्टम-वाइड .bashrc फ़ाइल है।"

Rvm फ़ंक्शन के लिए मेरा कॉल [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm", वहां गया, और उस सिस्टम पर उपयोगकर्ताओं के कुछ के लिए ठीक काम करता है।


सूक्ति-प्रकार कुछ भी नहीं करता है। gnome-टर्मिनल इंटरैक्टिव मोड में bash (या जो भी आपका लॉगिन शेल पासवार्ड डेटाबेस में सेट किया गया है) चलाता है, और bash ने इंटरएक्टिव तरीके से पढ़ना शुरू किया /etc/bash.bashrc। कम से कम, डेबियन / उबंटू पर। बैश सामान्य रूप से एक सिस्टम वाइड बैश आर्क नहीं पढ़ता है; डेबियन ने ऐसा करने के लिए इसे पैच किया है।
गरिहा

@geirha: dmitri @ Eos: ~ $ uname -a Linux Eos 3.0.0-16-जेनेरिक # 29-Ubuntu SMP Tue 14 फरवरी 12:48:51 UTC 2012 x86_64 x86_64 x86_64 GNU / लिनक्स dmitri @ Eos: ~ $ cat / आदि / bash.bashrc # सिस्टम-वाइड .bashrc इंटरएक्टिव बैश (1) गोले के लिए फ़ाइल। # लॉगिन शेल के लिए इस फाइल में सेटिंग्स / कमांड को सक्षम करने के लिए, # इस फाइल को / etc / प्रोफाइल में खट्टा करना होगा। # अगर अंतःक्रियात्मक रूप से नहीं चल रहा है, तो कुछ भी न करें [-z "$ PS1"] && वापसी .....
दिमित्री

2
हां, जाहिर है, सूक्ति-टर्मिनल उस फ़ाइल को पढ़ने के लिए बैश करता है: यदि आपका शेल ksh है, तो gnome-टर्मिनल उस फ़ाइल को नहीं पढ़ेगा, तो क्या यह होगा? इससे पहले कि आप "कुछ भी नहीं करता है" जैसे उत्तेजक वाक्यांशों का उपयोग जारी रखने से पहले मुझे शब्दकोश में शब्द "पेडेंट" देखने की सलाह देनी चाहिए।
दिमित्री

4

मल्टीमीटर के रूप में आरवीएम को स्थापित करने के लिए उपयोगकर्ता को इस कमांड को चलाने की आवश्यकता होती है:

(क्योंकि उबंटू लॉगिन में /etc/profile.d स्रोत नहीं करता है)

echo '[[ -s "/etc/profile.d/rvm.sh" ]] && . "/etc/profile.d/rvm.sh" # Load RVM function' >> ~/.bashrc

3
उबंटू /etc/profile.d/लॉगिन के दौरान फाइलों को सोर्स करता है क्योंकि डिफॉल्ट /etc/profileलूप्स, और सोर्स, इन फाइल्स /etc/profile.d/। हालाँकि, यदि rvm.shइसमें इंटरेक्टिव गोले, जैसे फ़ंक्शंस या अलाइज़ के लिए कोड होता है , तो उनके द्वारा /etc/profileखट्टा होना व्यर्थ है। इंटरैक्टिव बैश सत्र के लिए सेटअप में होना चाहिए .bashrc
गरिहा


0

मैंने वास्तव में उन लोगों के लिए पाया है जो अपने बक्से को पूरी तरह से फिर से शुरू करना पसंद नहीं करते हैं जब तक कि यह पूरी तरह से निम्नलिखित की आवश्यकता न हो ...

/etc/profileप्रभावी होने के लिए आपको पूरी मशीन को फिर से शुरू करने की आवश्यकता नहीं है। बस आपको अपने XWindows Desktop GUI को फिर से शुरू करना होगा, ताकि यह पुनः कॉन्फ़िगर हो जाए (जैसे कि यह सिस्टम-वाइड पुनरारंभ के भाग के रूप में शुरू किया जाए)।

मेरे लिए मैं xUbuntu का उपयोग करता हूं जो कि लाइट-डीएमडी का उपयोग करता है लेकिन आप अपने वर्तमान डेस्कटॉप को कॉल करने योग्य सब कुछ में उप कर सकते हैं।

सबसे पहले, आप ऐसा करने के लिए डेस्कटॉप GUI के अंदर से एक टर्मिनल एमुलेटर का उपयोग नहीं कर सकते हैं (कम से कम LightDM के साथ नहीं) आपको SSH या द्वितीयक कंसोल का उपयोग करने की आवश्यकता है (यदि आप Ctrl + Alt दबाए रखते हैं और एक F कुंजी या नंबर कुंजी दबाते हैं। आपको अपने चित्रमय डेस्कटॉप लॉगिन या स्क्रीन से एक सादे टर्मिनल विंडो पर छोड़ देना चाहिए)। मैं आपको सुझाव देता हूं कि यदि आप SSH का उपयोग कर रहे हैं तो VNC जैसे किसी भी दूरस्थ डेस्कटॉप सामान को बंद कर दें (जाहिर है कि SSH आप कनेक्ट हो सकते हैं बस एक खुली VNC विंडो को मतदान प्रदर्शन के लिए नहीं चाहिए, जबकि यह पुनरारंभ करने की कोशिश कर रहा है, जबकि यह पुनरारंभ हो सकता है। यह आपके लिए वीएनसी सत्र को समाप्त करने की प्रतीक्षा करता है)।

मैं एसएसएच के साथ हर समय ऐसा करता हूं और यह एक बड़ा जीवन रक्षक है, खासकर जब आप अपनी मशीन से शारीरिक रूप से नहीं हैं और पूरी तरह से फिर से शुरू करने और पुन: कनेक्ट होने का इंतजार नहीं करते हैं: -डी

अब एक "माध्यमिक" टर्मिनल या एसएसएच मुद्दे में एक बार आसान हिस्सा: (हां, यह आपके वर्तमान सत्र को मार देगा, सुनिश्चित करें कि आप बुरा नहीं मानते हैं, किसी भी खुले दस्तावेज़ या कार्य को बचाएं)

sudo service lightdm restart

एक मिनट प्रतीक्षा करें क्योंकि यह डेस्कटॉप को मारता है और फिर इसे फिर से शुरू करता है (यह कुछ अच्छे सेकंड ले सकता है क्योंकि चीजें बंद हो जाती हैं और फिर शुरू होने के बाद फिर से निष्पादित होती हैं)

यही है, अब जब आप 0 या तो कंसोल पर वापस जाते हैं या आप फिर से कनेक्ट करने के लिए वीएनसी का उपयोग करने के लिए जाते हैं तो आपको लॉगिन प्रॉम्प्ट द्वारा बधाई दी जाएगी और सामान्य रूप से लॉगिन करेंगे और यदि आप एक टर्मिनल एमुलेटर खोलते हैं और अपनी कमांड जारी करने के लिए जाते हैं कोई समस्या नहीं है क्योंकि सब कुछ फिर से खट्टा था जैसे कि आपने एक पूरी मशीन को फिर से शुरू किया।

बस याद रखें, यदि आप एक टर्मिनल एमुलेटर का उपयोग करते हुए डेस्कटॉप वातावरण के भीतर से sudo service lightdm restart[या stop, startजो कुछ भी] जारी करते हैं, कमांड सिर्फ वहीं लटके रहेंगे और कुछ भी प्रतीत नहीं होगा। यह इसलिए है क्योंकि आप वर्तमान में उस कंसोल (उर्फ डिस्प्ले) 0 का उपयोग कर रहे हैं और इसलिए यह पूरी तरह से नीचे नहीं जा सकता है और वापस आ सकता है क्योंकि यह डेस्कटॉप के चलने का इंतजार कर रहा है क्योंकि यह कमांड चलाता है।

अंतिम नोट: मैंने टर्मिनल एमुलेटर में डेस्कटॉप के भीतर से पर्यावरण पर पुनः आरंभ करने की कोशिश नहीं की है और फिर किसी अन्य कंसोल पर स्विच करें जो इसे फिर से चालू कर सकता है, लेकिन यदि आप पहले से ही कंसोल को स्विच करने जा रहे हैं तो केवल कमांड क्यों न चलाएं वहाँ से यह वैसे भी होना चाहिए?


-4

इको ".प्रोफाइल" >> ~ / .bashrc

और फिर दूसरी विंडो खोलें। मुझे लगता है कि यह आसान तरीका है।


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