मुझे "बिन / बैश --login" चलाने की आवश्यकता क्यों है


12

मेरे पास सिर्फ एक नया उबंटू 13.10 सर्वर है जिसमें माणिक 2.1.1 स्थापित है rvm

समस्या यह है कि जब भी मैं उपयोगकर्ता को "रेल" पर स्विच करता हूं (उपयोगकर्ता ने मुझे माणिक और रेल स्थापित किया है) तो मुझे /bin/bash --loginउस रूबी, रेल या rvmस्थापित को पहचानने से पहले दौड़ना होगा ।

आशा है कि कोई जानता है:

  1. ऊपर दिया गया आदेश क्या करता है?
  2. मुझे इसे चलाने की आवश्यकता क्यों है?
  3. और मैं इसे एक बार और सभी के लिए हल करने के लिए क्या कर सकता हूं? :)

किसी भी मदद की सराहना की है!


2
आप उपयोगकर्ता को "रेल" (सादे su? या कुछ su -lऔर su --?) पर कैसे स्विच कर रहे हैं । उपयोगकर्ता "रेल" के लिए लॉगिन शेल क्या है? आप उपयोगकर्ता के पथ चर संशोधित किया था और यदि ऐसा है तो जो फ़ाइल में ( ~/.profileया ~/.bashrcया ~/.bash_profileया ...?)
steeldriver

अब मैं देखता हूं कि समस्या केवल तब होती है जब मैं रूट कमांड को रूट उपयोगकर्ता से स्विच करने के लिए उपयोग करता हूं। जब मैं रेल उपयोगकर्ता के साथ ssh करता हूं तो यह समस्या नहीं होती है। हालाँकि मैं अभी भी जानना चाहूंगा / बिन / बैश - क्लोजिन क्या करता है। :)
ओले हेनरिक स्कोगस्ट्रोम

जवाबों:


11

ऐसा लगता है कि सिस्टम के लिए आवश्यक वातावरण स्थापित माणिक घटकों को खोजने के लिए एक फ़ाइल में निर्दिष्ट है जो केवल लॉगिन गोले के लिए पढ़ा जाता है। बैश मैनुअल पेज में लॉगिन गोले और गैर-लॉगिन गोले के बीच अंतर के बारे में कहना है:

INVOCATION
   A  login shell is one whose first character of argument zero is a -, or
   one started with the --login option.

तथा

   When bash is invoked as an interactive login shell, or as a non-inter
   active shell with the --login option, it first reads and executes  com
   mands  from  the file /etc/profile, if that file exists. After reading
   that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile,
   in  that order, and reads and executes commands from the first one that
   exists and is readable.  

जहाँ तक

   When an interactive shell that is not a login shell  is  started,  bash
   reads  and  executes  commands  from /etc/bash.bashrc and ~/.bashrc, if
   these files exist. 

इसलिए यदि माणिक पर्यावरण चर /home/rails/.profileया /etc/profileउदाहरण के लिए हैं, तो उन्हें शेल वातावरण में जोड़ा जाएगा

  • स्पष्ट रूप से एक लॉगिन खोल का उपयोग कर लागू द्वारा su -l railsया su --login railsया आशुलिपिsu - rails
  • जब उपयोगकर्ता railsSSH के माध्यम से लॉग इन करता है
  • bash --loginलॉगिन के बाद एक सबशेल शुरू करके

यदि आप चाहते हैं कि माणिक वातावरण को सेट किया जाए, भले ही आप उपयोगकर्ता के लिए स्विच करें rails, तो आप संबंधित परिवर्तनीय परिभाषाओं को उपयोगकर्ता के ~/.bashrcबजाय स्थानांतरित कर सकते हैं ।


हम्म, ठीक है, मुझे लगता है कि मुझे पिछले भाग का एक उदाहरण चाहिए। मैं linux और ubuntu के लिए नया हूँ। प्रासंगिक चर परिभाषाएं क्या हैं? अब वे किस फ़ाइल में लिखे गए हैं? क्या आप मुझे एक उदाहरण दे सकते हैं? यह थोड़ा सैद्धांतिक है।
ओले हेनरिक स्कोस्ट्रॉसम

5

मुझे पता है कि यह सवाल 2 साल पहले पूछा गया था, लेकिन अगर किसी को (मेरे जैसे) अभी भी इसका सामना करना पड़ रहा है: @steeldriver सही है - आप अपनी bashrcउस चीज़ को याद कर रहे हैं जो आपके पास उन 3 फाइलों में से एक में है। मेरे मामले में मुझे इस लाइन को जोड़ने की जरूरत थी ~/.bashrc:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.