Path
PATH 變數中的重複條目是否會撤銷第一個條目給出的優先級?
如果我有一個 PATH 變數(當分解為多行時)包含類似這樣的內容(我添加了一些註釋):
/Users/brandon/.rvm/gems/ruby-2.0.0-p353/bin /Users/brandon/.rvm/gems/ruby-2.0.0-p353@global/bin /Users/brandon/.rvm/rubies/ruby-2.0.0-p353/bin /opt/local/bin /opt/local/sbin /usr/local/sbin /usr/local/bin # <<--- notice this path appears again later /usr/bin # <<--- notice this comes AFTER /usr/local/bin /bin /usr/sbin /sbin /usr/local/bin # <<--- here it is again! /usr/local/git/bin /Users/brandon/bin /Users/brandon/.homebrew/bin /usr/local/mysql/bin /usr/local/share/npm/bin /Applications/Postgres93.app/Contents/MacOS/bin /Users/brandon/.rvm/bin
第二個的存在是否有可能
/usr/local/bin/
導致/usr/bin
優先於/usr/local/bin
?這似乎很瘋狂(對我來說:我從未聽說過這樣的事情),但這正是我所看到的行為。我剛剛使用 Homebrew 安裝了 PHP,但係統 PHP(來自/usr/bin
)優先:$ which php /usr/bin/php
但是,在手動更改 PATH 之後(而不是探勘我提供的所有文件
.zshrc
以試圖找出重複的原因和來源)以刪除 的第二個實例/usr/local/bin
,我發現它/usr/local/bin
優先於/usr/bin
我本來的首先期望它:$ which php /usr/local/bin/php
什麼會導致這個?這是正常的嗎?
hash -r
(forbash
)如果您剛剛安裝了一個二進製文件,shell 可能不會立即知道它,因為它確實維護了一個記憶體(相對於掃描PATH
每個命令。)路徑按順序掃描,重複完全沒有區別。但是,較笨的 shell 可能會多次掃描重複條目——如果 foo 存在兩次並且 bar 不在 foo 中,則 foo 可能會被掃描兩次。