2011-04-09 34 views
22

RVM可以做的一件事是在您更改目錄時尋找.rvmrc,並根據該文件的內容更改當前的Ruby版本和gemset。只要您切換到該目錄並相應地輸出消息,它就會進行此更改。當您更改目錄時,RVM如何檢測?

它如何檢測當前工作目錄中的更改?我可以想象一個非常簡單的方法:運行一個作爲當前用戶運行的守護進程,並不斷檢查pwd的結果。但我肯定這不是它所做的。

另一種方法可能是別名cd更改目錄,還檢查了.rvmrc和改變gemsets如果是這樣的指示。

是否有用於更改目錄的Unix系統掛鉤,或者是否存在RVM正在使用的其他一些技巧?

+1

由於密碼是每個進程,而不是每個用戶,我不認爲守護進程會工作。 – 2011-04-09 13:27:05

+0

@TomAnderson絕對正確。我對這個概念感到困惑。 :) – 2015-03-23 14:17:59

+0

順便說一句,我現在使用chruby,並[已定製其目錄監視行爲以適合我在zsh中的使用情況](http://nathanmlong.com/2015/01/optimizing-chruby-for-zsh/) – 2015-03-23 14:19:08

回答

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獲取存儲函數的文本文件。您可以在Bash手冊中輸入read more about Bash startup files

The Ruby enVironment Manager (RVM)被寫入並主要針對Bash shell。RVM將在ZSH shell,它允許你一個cd動作之後函數調用添加工作。這是解決這一任務的最好方法。所以,如果你的shell允許的話,一定要用這個方法。 RVM確實。

對於一個廣泛的例子,你可以look at RVM's cd functionality on GitHub

RVM利用此功能,裝載per-project (directory, really) .rvmrc files以及爲用戶提供配置各種掛鉤的能力。你可以閱讀更多關於RVM's hooks on the documentation website

+0

真棒 - 謝謝你回答我的問題! – 2011-04-18 12:53:17

0

它只是在需要解析gemset的內容時才查看當前目錄嗎?有沒有什麼能讓你認爲它是在改變目錄的同時,而不是根據需求呢?

+0

我澄清了我的問題:只要我更改爲使用'.rvmrc'的項目目錄,它就會更改我當前的Ruby版本和gemset,並輸出一條消息,說明它現在使用的是什麼。 – 2011-04-11 13:26:12

+0

我明白了。這是巧妙但可怕的行爲! – 2011-04-11 17:23:00

4

當您安裝RVM你必須添加:

[-s $ HOME/.rvm /腳本/ RVM] & & 源$ HOME/.rvm /腳本/ RVM

到你的shell配置(通常是.bashrc.zshrc)。

這將加載RVM當你啓動一個shell,然後覆蓋你的cd命令和檢查.rvmrc S作爲你走動。有關更多詳細信息,請參閱$HOME/.rvm/scripts/cd的內容。

+0

爲我安裝的RVM自動完成了.bash_profile – Bogatyr 2013-04-11 16:55:52