"zsh: command not found:
"這個錯誤相信大家都不陌生氓润,以前每次遇到這個問題都是Google一下,然后告訴你在xxx
文件添加xxx
文字座每,或者在Terminal運行xxx
命令即可誉察,有些work,有些不行踱讨。
萬事皆有因魏蔗,今天我們就來說一下這個問題發(fā)生的時最常見的原因和解決辦法,讓你下次再遇到這種問題時自己就可以解決不需要在去Google
xxx Gems command not found
痹筛。
問題通常發(fā)生在局部安裝了某個Terminal程序之后莺治,此時程序可能在某個ruby gem的bin目錄下廓鞠,或者Application下(如:sublime),需要我們創(chuàng)建一個指向這個地址軟鏈接谣旁,可以方便的訪問它床佳。例如:
subl .
or pod install
Terminal訪問程序原理
Linux環(huán)境下通常我們將Terminal可訪問的程序放在/bin
, /usr/bin
, /usr/local/bin
,有時也會放在~/bin
目錄下榄审。
那么在Terminal頁面打開(其實是shell login)的時候砌们,程序是如何Load進來的呢?過程大致如下:
- Terminal打開時當前user默認的shell會去讀取自己的配置文件搁进,一般在
~
目錄下浪感; - 這個配置文件會去
export
上述幾個路徑,讀取*/bin
下的可執(zhí)行文件饼问; -
*/bin
下的可執(zhí)行文件通常情況下是指向某個路徑下的軟鏈接(可以使用ln -s
創(chuàng)建)影兽;
問題原因
基于上面的過程,我們在Terminal中訪問得到command not found
的具體原因可能如下:
- 當前調(diào)用的命令確實沒有安裝匆瓜,如:"lorem spear"赢笨;
- 當前命令安裝了,但是沒有創(chuàng)建軟鏈接到
*/bin
驮吱; - 當前命令已創(chuàng)建軟鏈接到
*/bin
茧妒,但是所在*/bin
路徑?jīng)]有被export;
解決辦法
接下來以Mac下的zsh為例給出解決辦法:
Linux系統(tǒng)或者其他Shell(如:bash左冬、sh等)只需要換一些shell的配置文件即可桐筏。
-
首先zsh的配置文件在
~/.zshrc
,使用任何編輯器(vim拇砰、atom)打開這個文件梅忌,搜索export
會看到有如下一行:`export PATH="/Users/yourname/.rbenv/shims:/opt/iOSOpenDev/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"`
PATH=
后是用:
連接的多個*/bin
路徑[1]:/usr/sbin /bin /usr/bin /usr/local/bin
我的機器中安裝了
rbenv
和iOSOpenDev
,所以還 export 了:/Users/yourname/.rbenv/shims
有的程序安裝時會自動添加自己的
*/bin
的export
或者引導你運行一些命令去添加除破,原理都是一樣的 -
在上面的路徑中找一個合適的路徑牧氮,如
/usr/bin
或者/usr/local/bin
,然后在這個路徑下創(chuàng)建一個指向not found
那個程序的軟鏈接瑰枫。當然踱葛,你也可以像
rbenv
那樣直接將程序所在路徑或者一些特定的*/bin
整個加到export
中。 -
你需要找到
not found
的這個程序在什么位置光坝,比如:-
subl
在/Applications/Sublime\ Text\ 2.app/Contents/SharedSupport/bin/subl
路徑下尸诽; -
pod
的所在路徑可以通過下面命令找到(所有的ruby gems程序都可以通過這種方式找到):
$ gem which cocoapods /Users/eloy/.gem/ruby/2.0.0/gems/cocoapods-0.29.0/lib/cocoapods.rb $ /Users/eloy/.gem/ruby/2.0.0/bin/pod install
如果以后有時間豐富一些常見的case。
-
-
創(chuàng)建從程序所在位置到
*/bin
的軟鏈接盯另。創(chuàng)建軟鏈接的命令是ln -s $source $target
性含,-s
參數(shù)表明創(chuàng)建的鏈接類型,source
表示程序所在位置鸳惯,target
表示軟鏈接的所在路徑商蕴。例如:
ln -s /Users/kimimaro/.rbenv/versions/2.0.0-p645/bin/pod /usr/local/bin
-
運行
source
命令使軟鏈接生效叠萍。新創(chuàng)建的軟鏈接在當前的Terminal頁面(即沒有再次運行shell login)不會生效,需要對當前Shell(在本例中即zsh
)的配置文件(在本例中即~/.zshrc
)手動執(zhí)行source
來加載究恤。例如:source ~/.zshrc
此時再次運行命令已經(jīng)不會報錯了俭令。
腳注
-
這些系統(tǒng)路徑用戶使用權限和登錄和非登等情況下作用有所不同,部宿,但由于我們絕大部分操作都在登錄情況下因此本文范圍內(nèi)不再詳述。 ?