
正在嘗試設定自製在新的 Mac 上(在以前的 Mac 上,我會從原始碼安裝軟體包)。
我嘗試安裝的第一個套件是 Git:
$ brew install git
安裝順利,但仍顯示隨附的which git
內容/usr/bin/git
獅子(我認為?)。而不是/usr/local/bin/git
剛安裝的那個。
$ echo $PATH
/Users/meltemi/.rvm/gems/ruby-1.9.2-p290@rails31/bin:/Users/meltemi/.rvm/gems/ruby-1.9.2-p290@global/bin:/Users/meltemi/.rvm/rubies/ruby-1.9.2-p290/bin:/Users/michael/.rvm/bin:/usr/local/mysql/bin:/opt/subversion/bin:/Developer/Additions/checker/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
正如您所看到的,/usr/bin
預設值是之前/usr/local/bin
的$PATH
所以,我很困惑!我認為重點是自製啤酒(以及創建者似乎吹噓的事情)是你不必弄亂變數$PATH
! ?
那麼,我做錯了什麼?
答案1
我發現這篇相關文章非常有幫助。您無需更改$PATH
變量,只需編輯/etc/paths
文件即可。
一旦我按照/usr/local/bin
上面的說明進行操作/usr/bin
,我的問題就解決了。
- 在 OS X 上,開啟終端
- 輸入命令:
sudo vi /etc/paths
- 如果系統要求您輸入密碼,請輸入密碼
- 您將看到路徑清單。編輯它們,以便在
/usr/local/bin
路徑上方輸入/usr/bin
路徑 - *儲存並退出
- 重啟終端
這是我這樣做後的樣子:
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
*要儲存並退出,請鍵入冒號 ( :
),然後鍵入wq
(同時寫入和退出),然後鍵入Enter。
您也可以/etc/paths
在圖形文字編輯器中開啟該檔案並以這種方式進行編輯。
歸功於馮德 在 Stack Overflow 尋找他的答案。
答案2
這個答案已經過時了。首選的 HomebrewPATH
順序曾經如所解釋的那樣,但現在不再正確了。然而,該方法更普遍適用,因此出於興趣,我將其保留。
你不應該。
Homebrew 故意保留/usr/local/bin
後 /usr/bin
在路徑中以獲得最大相容性。PATH
透過編輯顛倒這些目錄的順序/etc/paths
意味著全部系統上任何位置的程序,無論它們是如何啟動的,都將獲得命令的 Homebrew 版本。但有些人可能特別期望蘋果的版本,或者只是無法使用更新的版本,等等。
如何保留這項原則並仍然獲得 Homebrew 安裝的版本git
?俗話說,所有問題都可以透過一層間接解決(除非間接層太多)。 ——或者在這種情況下,事實證明,是兩層。
~/bin
具體來說,我的 Unix習慣的一部分是在PATH
.這是我的第一部分之一.bashrc
:
[[ :$PATH: == *:$HOME/bin:* ]] || PATH=$HOME/bin:$PATH
這會檢查是否PATH
包含~/bin
,如果沒有,則在其前面添加。完成後,然後選擇性地使 Homebrew 管理的版本git
優先於系統版本(而不是每一個自製管理的二進位檔案),並且僅用於您的 shell 會話(而不是全部從任何地方啟動的程序,包括 GUI 程式),就像符號連結一樣簡單:
ln -s /usr/local/bin/git ~/bin/git
你可以直接符號鏈接,但是每次執行(直接或間接)/usr/local/Cellar/git/1.8.2.1/bin/git
時都必須修復符號鏈接。brew upgrade git
透過符號連結到 Homebrew 的固定位置符號鏈接,您不必擔心它。
所以你添加一個目錄到你的目錄中$HOME
,這樣你就可以將它添加PATH
到你的符號鏈接中,這樣你的問題就解決了,蘇斯博士笑了。喲,天哪,我像符號鏈接一樣聚集你,所以我們在你的路徑中放置了一條路徑,PATH
這樣你就可以在符號鏈接時進行符號鏈接。
答案3
你沒有做錯任何事,但看起來確實很清楚,如果你在這個特定問題/usr/local/bin
之前出現在你的道路上,/usr/bin
那麼這個問題就會消失。最簡單的解決辦法就是這樣做並放置類似的東西
export PATH=/usr/local/bin:$PATH
在你的~/.bash_profile
目錄中,首先找到 Homebrew 安裝的所有內容。這就是我在 Mac 上設定它的方式,而且它已經對我工作了很長時間了,YMMV。
看來他們確實相信這會/usr/local/bin
與後 /usr/bin
,所以雖然我可能搞砸了我自己的$PATH
,但我可以看到他們的文檔缺少的地方:
請注意,您應該放在
/usr/local/bin
後面,/usr/bin
因為某些程式會期望取得系統版本(例如 ruby),並且如果它們取得較新的 Homebrew 版本,則會中斷。
從wiki 與 brew doctor 之間的差異 #10738。請注意,本文檔接著說:“常見問題解答(上述引用)指的是 GUI 應用程式的 PATH 設定;醫生(放在/usr/local/bin
PATH/usr/bin
中的建議)指的是 CLI 應用程式的 PATH 設定。”
答案4
據我了解,brew
不會將任何內容放入/usr/local/bin
與 Apple 分散式執行檔發生衝突(具有相同名稱)的內容中。因此,/usr/local/bin
在先前的路徑中包含/bin
和/usr/bin
應該不是問題,因為不應該有名稱衝突。 *但是,請參閱ls
和的問題tar
,以及使用其他套件聚合器(如fink
和(MacPorts))的問題port
,如下所示。
Brew
據我所知,執行以下兩項有助於管理名稱衝突的操作之一:
Brew
將未連接的小桶留在地窖中。 為了安裝東西,brew 將工具保留在原來的位置,並在/usr/local/bin
.對於不希望名稱衝突的工具brew
,它不會建立符號連結。/bin
對於許多(如果不是全部)也包含在和中的標準工具/usr/bin
,brew
在連結中添加前綴/usr/local/bin
“g”,因此,例如,要ls
使用 brew 版本執行 ,請使用gls
。 只需執行ls -l
in操作/usr/local/bin
並找到連結的檔案 - 這些檔案就brew
放在那裡。注意:brew
必須實名存取的已安裝工具可在 中找到/usr/local/Cellar/coreutils/8.21/libexec/gnubin
。
我不/usr/local/bin
這樣做有兩個原因——這些原因在我的答案的底部。
要評估系統中的名稱衝突,請使用brew doctor
並尋找此部分 - 這是brew doctor
感興趣的輸出:
Warning: /usr/bin occurs before /usr/local/bin
This means that system-provided programs will be used instead of those
provided by Homebrew. The following tools exist at both paths:
ctags
emacs
emacsclient
etags
ex
git
git-cvsserver
git-receive-pack
git-shell
git-upload-archive
git-upload-pack
rview
rvim
view
vim
vimdiff
vimtutor
xxd
Consider setting your PATH so that /usr/local/bin
occurs before /usr/bin. Here is a one-liner:
echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile
我之所以沒有把brew
的工具放在第一位,事實上根本不是,是因為brew
安裝的命令ls
和tar
命令沒有正確處理檔案系統 ACL,事實上,我上次檢查時(這是上週),他們根本沒有被處理。這是一個大問題,為了完全避免它,以及man
與設定正確標記相關的頁面配置問題$PATH
,我確保首先放置相關工具,尤其是在和OSX
中找到的工具。/bin
/usr/bin
我甚至根本沒有放入/usr/local/bin
我的路徑的另一個原因是因為brew
與其他人不能很好地配合,並且fink
(port
MacPorts)目前有更多我需要的受支援的軟體包現在。例如,我可以得到gnome-terminal
,fink
但是建立一個公式並用 做同樣的事情將需要很大的努力brew
。因此,我在搜尋中保留/sw
和(分別為和)並引用我需要的內容,包括,要么拼寫出來,要么我使用's ,或者在編寫程式碼時為完全不同的環境獲取文件。/opt
$PATH
fink
port
/usr/local/bin
gnat
bash
alias
setup
Ada
問題是,這實際上取決於您當時想要什麼和需要什麼。
這是我上面提到的 ACL 問題的一個例子。
使用標準OSX
工具:
$ /bin/ls -le /var/root | head -7
total 24
drwx------+ 3 root wheel 102 May 28 2013 Desktop
0: group:everyone deny delete
1: user:_spotlight inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit
drwx------+ 6 root wheel 204 Sep 19 14:22 Documents
0: group:everyone deny delete
1: user:_spotlight inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit
並使用brew
已安裝的工具:
$ /usr/local/bin/gls -le /var/root
/usr/local/bin/gls: invalid option -- 'e'
Try '/usr/local/bin/gls --help' for more information.
和
$ /usr/local/bin/gls --help | grep -i acl
tar
我不知道還有多少其他工具會得到類似的結果brew
,但誰能承受得起 6 個月後因為某個ACL
問題而導致某些東西損壞的後果呢!