2011-04-09 8 views
22

एक चीज जो आरवीएम कर सकती है वह नोटिस है जब आपने निर्देशिकाएं बदल दी हैं, .rvmrc देखें, और उस फ़ाइल की सामग्री के अनुसार अपने वर्तमान रूबी संस्करण और रत्न को बदलें। जैसे ही आप उस निर्देशिका में बदलते हैं और तदनुसार एक संदेश आउटपुट करता है, यह यह परिवर्तन करता है।जब आपने निर्देशिका बदल दी है तो आरवीएम कैसे पता लगाता है?

वर्तमान कार्य निर्देशिका में बदलाव का पता कैसे लगाता है? मैं यह करने का एक बेहद कच्चा तरीका कल्पना कर सकता हूं: वर्तमान उपयोगकर्ता के रूप में चलने वाला एक डिमन चलाएं और pwd के परिणामों की जांच करता रहता है। लेकिन मुझे यकीन है कि यह नहीं है कि यह क्या करता है।

निर्देशिकाओं को बदलने के लिए cd के अलावा अन्य दृष्टिकोण हो सकता है लेकिन .rvmrc के लिए भी जांचें और यदि निर्देश दिया गया तो रत्नों को बदलें।

क्या निर्देशिका बदलने के लिए एक यूनिक्स सिस्टम हुक है, या क्या आरवीएम का उपयोग करने वाली कोई अन्य चाल है?

+1

चूंकि पीडब्ल्यूडी प्रति-प्रक्रिया है, प्रति उपयोगकर्ता नहीं, मुझे नहीं लगता कि डेमन काम करेगा। –

+0

@ टॉम एंडरसन बिल्कुल सही। मैं अवधारणा के बारे में उलझन में था। :) –

+0

संयोग से, अब मैं chruby का उपयोग कर रहा हूं, और [zsh में मेरे उपयोग के अनुरूप अपनी निर्देशिका-निगरानी व्यवहार को अनुकूलित किया है] (http://nathanmlong.com/2015/01/optimizing-chruby-for-zsh/) –

उत्तर

26

[rVM] वर्तमान कार्यशील निर्देशिका में परिवर्तन का पता कैसे लगाता है?

यह पूरी तरह से खोल और यहां तक ​​कि खोल संस्करण पर निर्भर करता है। इसे पूरा करने के लिए सबसे आसान तरीका है, जैसा कि सुझाव दिया गया था, उसी नाम के फ़ंक्शन को परिभाषित करके cd ओवरराइड करना। cd फ़ंक्शन में निर्मित कॉल करना सुनिश्चित करें या आप बहुत खराब या बहुत मनोरंजक साइड इफेक्ट्स (परिप्रेक्ष्य के आधार पर) का कारण बनेंगे।

cd() { 
    builtin cd $* 
    echo "Changed directories from '${OLDPWD}' to '${PWD}'." 
} 

एक पाठ स्रोत फ़ाइल में इस रखने और फ़ाइल सोर्सिंग करके आप सत्र फ़ाइल सोर्सिंग में इस कस्टम cd कार्यक्षमता लोड कर सकते हैं।

wayneeseguin$ cd /tmp 
Changed directories from '/home/wayneeseguin' to '/tmp'. 

आप चाहते हैं, तो यह हमेशा अपने उपयोगकर्ता खाते में इंटरैक्टिव गोले के लिए प्रभाव में हो तो ~/.bash_profile में समारोह परिभाषा जगह। वैकल्पिक रूप से आप उस पाठ फ़ाइल को स्रोत कर सकते हैं जिसमें आपने फ़ंक्शन को ~/.bash_profile से संग्रहीत किया है। आप बैश मैनुअल में read more about Bash startup files कर सकते हैं।

The Ruby enVironment Manager (RVM) मुख्य रूप से Bash shell के लिए लिखा गया है और लक्षित है।RVM ZSH shell में काम करेगा जो आपको cd क्रिया के बाद फ़ंक्शन कॉल जोड़ने की अनुमति देता है। यह इस कार्य को हल करने के लिए अब तक का सबसे अच्छा तरीका है। इसलिए, यदि आपका खोल इसके लिए अनुमति देता है, तो हर तरह से इस विधि का उपयोग करें। आरवीएम करता है।

एक व्यापक उदाहरण के लिए आप look at RVM's cd functionality on GitHub कर सकते हैं।

आरवीएम per-project (directory, really) .rvmrc files लोड करने के साथ-साथ उपयोगकर्ताओं को विभिन्न हुक को कॉन्फ़िगर करने की क्षमता प्रदान करने के लिए इस कार्यक्षमता का उपयोग करता है। आप RVM's hooks on the documentation website के बारे में अधिक पढ़ सकते हैं।

+0

बहुत बढ़िया - मेरे प्रश्न का उत्तर देने के लिए धन्यवाद! –

0

क्या यह वास्तविक निर्देशिका को देखता है जब भी इसे रत्न की सामग्री को हल करने की आवश्यकता होती है? क्या ऐसा कुछ है जो आपको लगता है कि यह मांग के बजाए बदलती निर्देशिकाओं के साथ समानांतर में ऐसा कर रहा है?

+0

मैंने अपने प्रश्न को स्पष्ट किया: जैसे ही मैं एक प्रोजेक्ट निर्देशिका में बदलता हूं जो '.rvmrc' का उपयोग कर रहा है, यह मेरे वर्तमान रूबी संस्करण और रत्न को बदलता है और यह संदेश भेजता है कि अब यह क्या उपयोग कर रहा है। –

+0

मैं देखता हूं। यह सरल लेकिन डरावना व्यवहार है! –

4

जब आप rvm स्थापित आप जोड़ने के लिए:

[[-s $ HOME/.rvm/scripts/rvm]] & & स्रोत $ HOME/.rvm/scripts/rvm

आपके खोल कॉन्फ़िगरेशन (आमतौर पर .bashrc या .zshrc) पर।

जब आप एक खोल शुरू करते हैं तो यह आरवीएम लोड करता है जो आपके cd कमांड को ओवरराइड करता है और .rvmrc के लिए चेक करता है जैसे आप घूमते हैं। अधिक जानकारी के लिए $HOME/.rvm/scripts/cd की सामग्री देखें।

+0

मेरे लिए आरवीएम इंस्टॉल स्वचालित रूप से किया गया था .bash_profile – Bogatyr

संबंधित मुद्दे