जड़ क्यों नहीं होता है .bash_profile?


10

हर बार जब मैं रूट का उपयोग करके su(नहीं su -) लॉगिन करने की कोशिश करता हूं , तो यह उपयोगकर्ता .bash_profileके घर निर्देशिका में स्रोत नहीं है ।

मूल रूप से, मेरी /var/rootनिर्देशिका नहीं है .bash_profileतो मैं की एक प्रति शब्दों में कहें, .bash_profileमें /var/rootपरीक्षण करने के लिए su -

यह स्वचालित रूप से स्रोत .bash_profile(में var/root) नहीं है, या तो।

वैसे भी, मैं उपयोगकर्ता 1 का उपयोग करना चाहता हूं .bash_profile, जब मैं उपयोग करता हूं तो रूट खाते में स्वचालित रूप से खट्टा हो जाता है su

मुझे क्या करना चाहिए?

(यह पहले काम किया था! एक दिन, यह सिर्फ स्रोत नहीं है! हो सकता है कि किसी चीज़ ने सेटिंग में बदलाव किया हो? यह तब काम करता है जब मैं source .bash_profileलॉगिन के बाद प्रवेश करता हूं ।)

मैं मैक और ओएस एक्स योसेमाइट का उपयोग कर रहा हूं।

जवाबों:


11

rootOS X के लिए डिफ़ॉल्ट शेल है /bin/sh। इसका shभी एक संस्करण है bash, लेकिन जब shबैश नाम से आमंत्रित किया जाता है :

shPOSIX मानक के अनुरूप होने के साथ-साथ यथासंभव ऐतिहासिक संस्करणों के स्टार्टअप व्यवहार की नकल करने की कोशिश करता है ।

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

यही है, यह बिल्कुल भी नहीं पढ़ता है .bash_profile, भले ही यह लॉगिन शेल के रूप में लागू किया गया हो या नहीं । आप .profileइसके बजाय उपयोग कर सकते हैं , या एक दूसरे से सहानुभूति भी रख सकते हैं । यदि आप एक लॉगिन शेल लॉन्च करते हैं su -l, .profileतो स्टार्टअप पर लोड होता है, लेकिन .bash_profileकभी नहीं होगा।


आप यह भी कर सकते हैं का उपयोगdscl (यह देखते हुए कि जड़ के खोल को बदलने के लिए /etc/passwdहै नहीं ओएस एक्स पर खोल निर्धारित करने के लिए प्रयोग किया जाता)। आप रूट के वर्तमान शेल की जांच कर सकते हैं dscl . -read /Users/root UserShell; प्रलेखन से परामर्श करें और इसे किसी और चीज़ में बदलने से पहले सावधानी से सोचें।

एक और दृष्टिकोण बस अपने suआह्वान को बदलने के लिए है ताकि bashतुरंत निष्पादन को मजबूर किया जा सके।

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


5

क्योंकि यह एक "लॉगिन शेल" नहीं माना जाता है (जो कि सीधे से login, या sshd) के लिए आमंत्रित किया गया है , लेकिन सरल "इंटरैक्टिव शेल" है। उदाहरण के लिए यहां देखें: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

तो suलॉगिन विकल्प यानी -lविकल्प के साथ बल प्रयोग करें :

su -l

या अपने वातावरण को .bashrcफ़ाइल में डालें ।


5

रूट उपयोगकर्ता, .bash_profile के बजाय .bashrc फ़ाइल को निष्पादित करने का प्रयास करेगा क्योंकि आप लॉगिन शेल को लागू नहीं कर रहे हैं।

बैश मैनुअल से man bash:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

ध्यान दें कि ~जहां .bashrc फ़ाइल को रूट उपयोगकर्ता के होमडायरेक्टरी में होना चाहिए।

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

आप . /homedirectory/of/user1/.bash_profileरूट उपयोगकर्ता के .bashrc फ़ाइल में लाइन जोड़कर user1 .bashrc या सम्‍मिलित .bash_profile स्रोत पर विचार कर सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.