我安裝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裡面的,都可以用這個方法解決路徑的問題
沒有留言:
張貼留言