जब सु चल रहा है


41

मेरे पास एक उपयोगकर्ता है, कहते हैं user1, जिसमें इसके संशोधन हैं .bash_profile, उनमें से एक को बदलना है PATH, जैसे export PATH=/some/place:$PATH:। यदि मैं लॉग ऑन करता हूं user1या करता हूं तो यह परिवर्तन ठीक काम करता है su - user1

लेकिन अगर मैं उदाहरण के suरूप में एक कमांड चलाने की कोशिश करता हूं root:

su -c test.sh oracle

(परीक्षण में शामिल है echo $PATH)

ऐसा लगता है कि संशोधित नहीं है PATH(या रूट की PATH, इस मामले के लिए)। मैं भी कोई फायदा नहीं हुआ, नकल .bash_profileकरने की कोशिश की है .profile

ये क्यों हो रहा है?



1
FYI करें - बैश कॉन्फ़िगरेशन फ़ाइलों पर अच्छा राइटअप hacktux.com/bash/bashrc/bash_profile
निखिल मुले

जवाबों:


60

का उपयोग करते हुए suबिना -lया -शुरू होता है bashएक इंटरैक्टिव, लेकिन गैर लॉगिन खोल, जो फाइलों आपके द्वारा निर्दिष्ट में से किसी से पढ़ा नहीं करता है। -lया -विकल्प का उपयोग करें या संबंधित कॉन्‍फ़िगर करें /root/.bashrc

विन्यास फाइल का त्वरित सारांश:

  • लॉग इन खोल ( -l/ --login) पढ़ता है /etc/profileपहले, और फिर पहले इसके बारे में पता चलता है: ~/.bash_profile, ~/.bash_login, और ~/.profile
  • इंटरएक्टिव लेकिन गैर-लॉगिन शेल ( -i) पढ़ता है /etc/bash.bashrcऔर ~/.bashrc, उस क्रम में (जब तक कि --rcfileविकल्प का उपयोग नहीं किया जाता है और इसे कहीं और देखने के लिए कहता है)।
  • गैर-संवादात्मक गोले, उदाहरण के लिए -lया -iझंडे का उपयोग किए बिना किसी अन्य कार्यक्रम के भीतर से शुरू हुआ, BASH_ENVपर्यावरण चर में निर्दिष्ट फ़ाइल को पढ़ता है ।
  • जब shएक लॉगिन शेल के रूप में चलाया जाता है , तो यह उसी क्रम में पढ़ेगा /etc/profileऔर ~/.profile
  • जब shएक इंटरैक्टिव नॉन-लॉगिन के रूप में चलाया जाता है , तो यह निर्दिष्ट फ़ाइल को पढ़ता है ENV

5

बैश अलग तरीके से व्यवहार करता है अगर यह मानता है कि यह एक लॉगिन शेल है, अर्थात जब आप सिस्टम पर लॉग ऑन करते हैं तो यह पहला शेल रन होता है। यह केवल तभी पढ़ता है .bash_profileजब यह एक लॉगिन शेल हो। यदि आप इसके बजाय PATH-changing कोड डालते हैं .bashrc, तो यह केवल लॉगिन गोले ही नहीं, सभी इंटरैक्टिव बैश शेल के लिए चलाया जाएगा।


0

यदि वैज्ञानिक लिनक्स 6 (या संभवतः आरएचईएल 6) में सूक्ति वातावरण का उपयोग करते हैं, तो एक टर्मिनल शुरू करें। पर जाएं Edit> - Profile Preferences-> "Title and Command"टैब। सुनिश्चित करें कि चेकबॉक्स "रन कमांड के रूप में लॉगिन शेल" चेक किया गया है। मैंने पाया कि .bash_profileजब तक मैं ऐसा नहीं करता Gnome टर्मिनल एप्लिकेशन मेरी अनदेखी कर रहा है।

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