2015-04-23 59 views
1

今天我只是鼓勵一個奇怪的問題。zsh的奇怪行爲PATH

我的環境是Mac OS X的優山美地,zsh的5.0.5(x86_64的 - 蘋果darwin14.0)

在.zshrc,我已經手動設置PATH變量類似

export PATH="$PATH:~/.composer/vendor/bin" 

在終端嘗試echo $PATH,結果如預期(包含~/.composer/vendor/bin)。然後嘗試從~/.composer/vendor/bin執行一個二進制文件,它總是會返回我「zsh:command not found」錯誤。

嘗試切換到bash,echo $PATH也如預期的那樣,與zsh shell具有相同的結果。 嘗試執行從~/.composer/vendor/bin的二進制文件,沒有發現問題。看來PATH var在bash shell上運行良好。

我的zsh shell有什麼問題?

感謝

+1

嘗試'$ HOME'而不是'〜',並注意「composer」!=「.composer」 –

+0

對不起,關於「composer」&「.composer」,這是一個錯字,現在修復它 – DQM

+0

@WilliamPursell '$ HOME'技巧按預期工作。請將您的評論作爲答案,我將標記爲解決方案:) – DQM

回答

2

嘗試使用的$HOME代替~。在許多情況下,當你期望它們時shell不會擴展~,通常使用$HOME會更好。 ~真的只是一個交互式使用的捷徑。 (我記得唯一的情況是~是首選,在一個.gitalias中,擴展了變量,變量不是。)

1

類型rehash回升$PATH變化。

zsh user guide

命令的存儲方式帶來了其他後果。特別是,如果zsh 已經知道在哪裏找到一個新命令,它將不會查找新命令。如果 我在上面的例子中在/usr/local/bin中輸入了一個新的ls命令,zsh 將繼續使用/bin/ls(假設它已被發現)。到 修復此問題,有命令rehash,其實際清空 命令散列表,以便查找命令再次從 從頭開始劃傷。的csh用戶可能還記得不必鍵入rehash不少 用新的命令:它不是在zsh那麼糟糕,因爲如果沒有命令 已經散列,或現有一個消失,zsh將 自動再次掃描路徑;此外,如果$path被更改,則zsh自行執行rehash 。因此在$path的頭部添加一個新的重複的 命令是 需要重新刷新的主要原因。

編輯然而@WilliamPursell可能是在一些與他的意見:

注意, 「作曲家」= 「.composer」

+0

@WilliamPursell的'$ HOME'技巧奏效,謝謝:) – DQM