我安裝Ruby後,為了搞定路徑花了老半天,後來弄懂了Linux指令在 which , type , $PATH 與 Hashed 就清楚多了。 如果你的系統有內建Ruby,打 which ruby ,會發現他的路徑在 usr/bin/ruby 底下,接著不管你用了什麼方法裝了新的Ruby,就把新的路徑在$PATH裡加到 usr/bin 的前面,系統通常就預設執行在$PATH裡面,放在前面先找到的那個Ruby。 但是有個情況,你加了$PATH以後沒有用,系統還是一直去執行舊的Ruby。可是打 which ruby 明明就是新的路徑呀? 我遇到的情況是這樣打 type ruby 會發現 ruby is hased(/usr/bin/ruby) ,這是什麼意思呢?為什麼 which ruby 跟 type ruby 的路徑會不一樣。這種情況是 ruby 這個命令,在系統一開始就被寫在系統的hash table裡面。這邊簡單分類一下 which 跟 type 的不同: which: 單純從$PATH裡面尋找到的路徑。 type: 指令真實被執行時使用的路徑。 which 只是單純顯示在$PATH, type 才是真實下命令按Enter後去執行的路徑。 所以安裝了新Ruby,可是系統若之前就把Ruby放在hash table裡面,他就會一直執行舊版本的Ruby,這時候只要重登目前這個Shell,讓hash table refresh一下就好了。如果還是不行,系統不曉得寫在什麼地方,他就是喜歡自動把舊Ruby放到hash table裡面。那就只好手動改了,在bash底下執行: hash -r #清掉hash table裡所有的資料 上面這樣子是全清掉,全部的hash table重新建立。或者也可以像下面這樣: hash -d ruby #單純在hash table清掉Ruby 這樣子hash table裡面沒有 ruby 了,系統就得乖乖執行$PATH裡面找到的 ruby 囉。 不只有ruby唷,不管安裝什麼 php , python 還是 sqlite 之類的,如果跟系統預設衝突,而且還是放在hash table裡面的,都可以用這個方法解決路徑的問題