新しいMacで 自作 を設定しようとしています(以前のMacではソースからパッケージをインストールします)。
私が最初にインストールしようとしたパッケージはGitでした。
$ brew install git
インストールは問題ありませんでしたが、which git
は Lion に付随する/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
です。
だから、私は混乱しています! HomeBrew (および作成者が自慢しているように見えること)のポイントは、$PATH
変数をいじる必要がないということです!
それで、私は何を間違っていましたか?
私はこの関連記事がとても参考になったことがわかりました。 $PATH
変数を変更する代わりに、単に/etc/paths
ファイルを編集するだけです。
自作は私に私のPATHを修正することを望んでいる;何の手がかりもない
指示に従って、/usr/local/bin
を/usr/bin
の上に配置するとすぐに、問題は解決しました。
Sudo vi /etc/paths
/usr/local/bin
パスが/usr/bin
パスの上に入力されるようにそれらを編集しますこれを行った後の私の姿は次のとおりです。
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
*保存して終了するにはコロン(:
)を入力してからwq
を入力し(同時に書き込みと終了を行う)、続けて Enter。
グラフィカルテキストエディタで/etc/paths
ファイルを開き、そのように編集することもできます。
向こうの彼の答えのためのStack Overflowで fengd overへの功績。
この答えは時代遅れです。優先されるHomebrewのPATH
の順序は説明されている通りでしたが、それはもはや真実ではありません。ただし、このアプローチはより一般的に適用可能であるため、興味を引くように、ここでは取り上げません。
しないでください。
最大限の互換性を保つために、Homebrewは意図的に/usr/local/bin
を/usr/bin
の後に置きます。 /etc/paths
を編集してPATH
内のこれらのディレクトリの順序を逆にすると、システム上のどこにいても、allprogramsは、Homebrewバージョンのコマンドになります。 。しかし、Appleのバージョンを明確に期待している人もいれば、新しいバージョンを使用できない人もいます。
どうやってこの原則を守り、それでもHomebrewがインストールしたgit
のバージョンを入手するにはどうすればいいですか?言うように、すべての問題は間接層で解決することができます(間接層が多すぎることを除く)。 - あるいは、この場合、実は2層です。
特に、私のPATH
の始めに置く~/bin
ディレクトリを持つのは、私のUnix習慣の一部でした。これは私の.bashrc
の最初のビットの一つです:
[[ :$PATH: == *:$HOME/bin:* ]] || PATH=$HOME/bin:$PATH
これはPATH
に~/bin
が含まれているかどうかをチェックし、含まれていない場合はそれを先頭に追加します。それが整っていれば、(everyHomebrew-managed binaryの代わりに)Homebrew管理のgit
のみを選択的にシステムバージョンより優先させることができます。 (GUIプログラムを含む、どこからでも起動するallプログラムではなく)シンボリックリンクと同じくらい簡単です。
ln -s /usr/local/bin/git ~/bin/git
はsymlink /usr/local/Cellar/git/1.8.2.1/bin/git
に直接リンクできますが、brew upgrade git
を実行するたびに(直接または間接的に)シンボリックリンクを修正する必要があります。 Homebrewの固定位置のシンボリックリンクにシンボリックリンクすることで、心配する必要はありません。
それであなたはあなたの$HOME
にディレクトリを追加しますので、あなたはそれをあなたのPATH
に追加することができます。それであなたはシンボリックリンクにシンボリックリンクすることができます。あなたはシンボリックリンクが好きなので、私たちはあなたのシンボリックリンク中にシンボリックリンクできるようにあなたのPATH
にパスを入れます。
間違ったことは何もしていませんが、/usr/local/bin
の前に/usr/bin
がパスにあった場合、この特定の問題はなくなるでしょう。最も簡単な修正方法は、それを実行して、次のようなものを置くことです
export PATH=/usr/local/bin:$PATH
~/.bash_profile
にあるため、Homebrewがインストールするすべてのものが最初に見つかります。それが私のMacでの設定方法であり、YMMVでこの長い間機能していました。
/usr/local/bin
がafter/usr/bin
であることで動作すると信じているようです。 $PATH
、ドキュメントが欠けている箇所を確認できます。
/usr/local/bin
の後に/usr/bin
を配置する必要があることに注意してください。一部のプログラムは、Rubyなどのシステムバージョンを取得し、新しいHomebrewバージョンを取得すると中断するためです。
wikiとbrew doctor#10738の間の相違 。このドキュメントでは、「FAQ(上記の引用)はGUIアプリのPATH設定を参照しています。医師(/usr/local/bin
をPATHで/usr/bin
]に優先させることを参照) CLIアプリのPATH設定に。」
私はjthomasの答えに同意しません。/etc/pathsファイルを編集すると、すべてのプログラムのロードパスが変更されます。システムアプリケーションが特定のバージョンのバイナリを見つけることを期待していても、あなたがあなたのパスファイルを編集したので別のバージョンを見つけるのであれば、これは危険かもしれません。代わりに、〜/ .bashrc(または〜/ .bash_profile)のパス変数を変更してください。それからあなたのロード経路はターミナルの中でだけ変わるでしょう:
#PATHに自作アプリを追加する
export PATH =/path /から/ homebrew/app/binへ:$ PATH
それからbashかsource ~/.bashrc
をリロードしてください。自作パスは他の何よりも先にくるので、bashはあなたが自作でダウンロードしたバージョンをロードします。
私が理解しているように、brew
はApple分散実行可能ファイルと衝突する(同じ名前を持つ)/usr/local/bin
に何も入れません。したがって、/usr/local/bin
および/bin
の前のパスに/usr/bin
を含めることは、名前の競合がないため問題になりません。 *ただし、ls
およびtar
の問題、およびfink
およびport
(MacPorts)などの他のパッケージアグリゲーターの使用方法については、下記をご覧ください。
Brew
は、名前の衝突の管理に役立つ、私が知っている2つのことのいずれかを行います。
Brew
はセラーにリンクされていない樽を残します。ものをインストールするために、brewはツールをそのまま残し、/usr/local/bin
でそれらのツールへのシンボリックリンクを作成します。 brew
が名前の衝突を必要としないツールの場合、シンボリックリンクは作成されません。/bin
および/usr/bin
にもある標準ツールのすべてではないにしても、多くの場合、brew
は/usr/local/bin
のリンクの前に「g」を付けるため、たとえば、醸造バージョンでls
を実行するには、gls
を使用します。単にls -l
を/usr/local/bin
で実行し、リンクされたファイルを探します。 ones brew
そこに置きます。注:実名でアクセスする必要があるbrew
インストール済みツールは、/usr/local/Cellar/coreutils/8.21/libexec/gnubin
にあります。2つの理由で/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)には、現在必要なサポートされているパッケージがかなりありますNOW例えば、fink
でgnome-terminal
を取得できますが、式を作成して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
ツールを知らないが、ACL
の問題のために6か月後に何かを壊す余裕がある人!
ここにはたくさんの良い答えがあります。これが私のものです:
echo >> ~/.bashrc alias my="PATH=/usr/local/bin:$PATH"
. ~/.bashrc
my git --version # Brew's fancy git
git --version # Apple's old crusty git
プログラムごとに別々のエイリアスを作成する必要がなくなり、ボーナスとして必要に応じてデフォルトのインストールにアクセスできるようになります。
ZSHを使用している場合も同じように機能します。 bashrc
をzshrc
に切り替えるだけです。あなたは_
や@
のためにmy
を無効にして入力を節約することができます。
PATHをいじるのではなく(私の歴史では数か月後に私を焼き払うために戻ってきました)、私のzshカスタムエイリアスディレクトリ(〜/ .zshrc/custom/git_alias.zsh)にgitのエイリアスを追加しました。
alias git='/usr/local/bin/git'
私は$PATH
のような環境変数への変更を実際に変更したいユーザーに限定することを好みます。したがって、私は単に以下を~/.bashrc
に追加します。
export PATH="$(brew --prefix)/bin:$PATH"
あなたは端末で以下のコマンドを発行することができます、それはあなたのどんなシェル "rc" initファイル(bash、zsh、csh)のパスにbrewホームディレクトリ+/binを追加するでしょう。
echo "export PATH="'$PATH:$(brew --prefix)/bin' >> ~/.$(basename $Shell)rc
楽しい !