セットアップしようとしています自家製新しい 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
。
Homebrew は PATH を修正するように要求しますが、方法がわかりません
指示に従って/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
この回答は時代遅れです。Homebrew の推奨PATH
順序は、以前は説明どおりでしたが、これはもう当てはまりません。ただし、このアプローチはより一般的に適用可能なので、興味のためにそのまま残しておきます。
そんなことはしないほうがいいよ。
Homebrewは意図的に/usr/local/bin
後 /usr/bin
PATH
最大限の互換性のために、パスにこれらのディレクトリの順序を逆にすると/etc/paths
、全てシステム上のどこにあるプログラムでも、どのように起動されたかに関係なく、Homebrew バージョンのコマンドが取得されます。ただし、Apple のバージョンを特に期待している場合や、新しいバージョンを使用できない場合もあります。
この原則を維持しながら、Homebrew でインストールされたバージョンの を入手するにはどうすればよいでしょうgit
か。諺にあるように、すべての問題は間接層で解決できます (間接層が多すぎる場合を除く)。 — または、この場合は、結局のところ 2 つの層になります。
~/bin
具体的には、私の Unix の習慣として、 の先頭にディレクトリを置くことになっていますPATH
。これは、私の の最初の部分です.bashrc
。
[[ :$PATH: == *:$HOME/bin:* ]] || PATH=$HOME/bin:$PATH
これPATH
は が含まれているかどうかを確認し~/bin
、含まれていない場合はそれを先頭に追加します。これを設定すると、Homebrew管理のものだけをgit
システムバージョンよりも優先するように選択できます(毎Homebrew管理バイナリ)とシェルセッションのみ(全て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 での設定方法であり、これまではうまく機能していましたが、結果は人によって異なります。
/usr/local/bin
彼らはそれがうまくいくと信じているようだ後 /usr/bin
なので、私自身が台無しにしてしまったかもしれませんが$PATH
、彼らのドキュメントが欠けているところはわかります。
一部のプログラムは、たとえば ruby のシステム バージョンを取得することを期待しており、新しい Homebrew バージョンを取得すると動作が中断されるため、
/usr/local/bin
後に置く必要があることに注意してください。/usr/bin
からwiki と brew doctor の不一致 #10738/usr/local/bin
このドキュメントには、「FAQ (上記の引用) は GUI アプリの PATH 設定について言及しており、ドクター (PATH の先頭に配置するアドバイス/usr/bin
) は CLI アプリの PATH 設定について言及しています」と記載されていることに注意してください。
答え4
私の理解では、は Apple の配布実行ファイルと衝突する (同じ名前を持つ)brew
ものは何も入れません。したがって、と の前のパスに があっても、名前の衝突は発生しないはずなので、問題にはなりません。 *ただし、との問題、およびや(MacPorts)などの他のパッケージ アグリゲータの使用に関する問題については、下記を参照してください。/usr/local/bin
/usr/local/bin
/bin
/usr/bin
ls
tar
fink
port
Brew
名前の衝突を管理するのに役立つ、私が知っている 2 つの方法のうちの 1 つを実行します。
Brew
リンクされていない樽をセラーに残します。 インストールを行うために、brew はツールをそのままにして、 内のそれらのツールへのシンボリック リンクを作成します/usr/local/bin
。 と名前が衝突することを望まないツールの場合brew
、シンボリック リンクは作成されません。- および にも含まれる標準ツールの多く(すべてではないにしても
/bin
)では/usr/bin
、brew
のリンクの先頭に/usr/local/bin
「g」が付けられます。そのため、たとえば、ls
brew バージョンで を実行するには、 を使用しますgls
。 単に を実行しls -l
て/usr/local/bin
、リンクされたファイルを探します。それらがbrew
そこに配置されているファイルです。注:brew
実際の名でアクセスする必要があるインストール済みツールは にあります/usr/local/Cellar/coreutils/8.21/libexec/gnubin
。
私が自分の道を進まない/usr/local/bin
のには 2 つの理由があります。その理由は私の回答の最後にあります。
システム内の名前の衝突を評価するには、 を使用し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
/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
。