Hombrewがインストールしたツールが見つかるように、MacでPATH変数を設定するにはどうすればよいですか?


86

新しいMacでHomebrewをセットアップしようとしています(以前のMacではソースからパッケージをインストールしていました)。

私がインストールしようとした最初のパッケージはGitでした:

$ brew install git

インストールは問題ありませんでしたが、which gitそれでもLionに/usr/bin/git付属しているものが表示されます(どうでしょうか?)。そして、その中の1つがインストールされただけではありません。/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変数をいじる必要がないことだと思いました!?!

それで、私は何を間違えましたか?


以前にパスを台無しにして、間違った順序で配置した可能性がありますか?また、これが自作の「自慢」の理由がわからない...それはパスの概念やそれを変更することとは異なり、特別な許可または何かでシステム全体に10の異なるリストを作成して振りかけることを含む複雑なものです。 ..
prodigitalson

1
パス(RVMに関連しない部分)は、標準の問題です。いいえ、パスを変更する必要があることについて文句を言っていません。それは、彼らがIf you choose /usr/local, everything 'just works!'私が行方不明になっていることを疑問に思っているという主張を繰り返しているように見えるということです...それは「うまくいかない」からです。
メルテミ

回答:


78

この関連記事が非常に役立つことがわかりました。$PATH変数を変更する代わりに、単に/etc/pathsファイルを編集するだけです。

HomebrewはPATHの修正を希望しています。手がかりはありません

指示に従って/usr/local/bin上記のよう/usr/binにするとすぐに、私の問題は解決しました。

  1. OS Xでは、ターミナルを開きます
  2. 次のコマンドを入力します。 sudo vi /etc/paths
  3. パスワードを求められたら入力してください
  4. パスのリストが表示されます。/usr/local/binパスの上にパスが入力されるように編集し/usr/binます
  5. *保存して終了
  6. ターミナルを再起動

私がそれをした後、私のものは次のようになります:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

*保存して終了するには、コロン(:)を入力してからwq((書き込みと終了を同時に)入力して)を押しEnterます。

/etc/pathsグラフィカルテキストエディタでファイルを開き、そのように編集することもできます。

Stack Overflowでの回答に感謝します。


(私のような)のvi dimwitsうとした場合に、コマンド・モードで、それを貼り付けラインとPをカットするためにDを使用
ジェラール

10
私はこれに注意を払います-より良い答えは、単に.profile / .bash_profileのパスを修正してそこにエクスポートすることです。/ etc / pathsを変更すると、(潜在的に)すべてのシステムプロセスに影響します。.profile / .bash_profileのPATHを変更すると、アカウントとコマンドシェルを介して呼び出されるコマンドの両方に設定がローカライズされます(これは、私の開発では、私が望むものです)。あなたが本当に用心深いなら、@ Aristotle Pagaltzisが以下の答えで提案していることをすることができます。
rholmes

1
OSX用に設計されたパッケージマネージャーからの単純なインストールがすぐに失敗するという、ひどく間違っていることを考慮するために停止するとき、いくつかのポイントがありますか?パスの変更は潜在的に壊れる「修正」であり、この修正案につまずいた理由は、brewが私のパスの更新に失敗するが、「paths」はすでに正しい順序にある​​ためです。別の行き止まり。狂気を止め、根本原因を修正してください。
リックオシェイ

また、がpath_helperあり/etc/paths.dます。
サイモンライト

29

この答えは時代遅れです。好適自作PATH使用順序はのように説明することにするが、それはもはや真実ではありません。ただし、このアプローチはより一般的に適用可能であるため、興味のために残しておきます。


してはいけません。

自作は、意図的に維持し/usr/local/bin た後 /usr/bin、最大の互換性のためのパスに。PATH編集によりこれらのディレクトリの順序を逆にすると、システム上のどこに/etc/pathsあるすべてのプログラムも、それらがどのように開始されたかに関係なく、コマンドのHomebrewバージョンを取得します。しかし、特にAppleのバージョンを期待している人もいれば、新しいバージョンを使用できないなどの人もいます。

この原則を維持しながら、Homebrewがインストールされたバージョンを取得する方法はgit?ことわざにあるように、すべての問題は間接層で解決できます(間接層が多すぎることを除く)。—または、この場合、判明したように、2つのレイヤー。

具体的~/binには、の開始時にディレクトリを置くことは、私のUnixの習慣の一部でしたPATH。これは、私の最初のビットの1つです.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シンボリックリンクにシンボリックリンクできるようにディレクトリを追加すると、問題が修正され、スース博士に笑顔が生まれます。Yo dawg私はシンボリックリンクが好きなので、PATHシンボリックリンク中にシンボリックリンクできるようにパスを入れます。


1
すばらしい、これは私が思っていたことに正確に答えます!
N_A

このSEEMSは正しい答えのようですが、実行する正確なコマンドがわかりません。シンボリックリンクを作成するとき、「ファイルが存在します」を取得し続けます。
ライアン

あなたを助けるのに十分な詳細はありません、ごめんなさい。
アリストテレスPagaltzis

1
@Ryanは、lnコマンド内で引数の順序が正しいことを確認します。最初のパスは、ターゲットであり、第二は、シンボリックリンクである
Freedom_Ben

1
.zshrcにパスの順序を編集する(私はZSHを使用)エルキャップの上に、私は時代遅れの答えで失敗して成功した、というのは本当export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
ウルス

17

あなたは何も間違ったことをしていませんが/usr/local/bin/usr/binこの特定の問題がなくなる前にあなたがあなたの道にいたならば、それはかなり明確に見えます。最も簡単な修正方法は、それを実行して、次のようなものを置くことです

export PATH=/usr/local/bin:$PATH

で、あなたの~/.bash_profile自作をインストールするので、すべてが最初に発見されました。それが私のMacでの設定方法であり、YMMVのこの長い間機能してきました。

彼らはそれが後にあるとうまくいくと信じて/usr/local/binいるようですので、私は自分のものをつぶしたかもしれませんが、ドキュメントが欠けている場所を見ることができます: /usr/bin$PATH

いくつかのプログラムは、例えばrubyなどのシステムバージョンを取得することを期待し、新しいHomebrewバージョンを取得すると中断するため、/usr/local/bin後に置く必要があることに注意してください/usr/bin

以下からのWiki&醸造ドクター#10738の間の不一致。この文書は言うようになっていることに注意してください、「FAQ(上記引用)は、GUIアプリケーションの設定PATHを意味し、医師(置くために助言/usr/local/bin先の/usr/bin PATHには)CLIアプリケーションの設定PATHを指します。」


1
これ/usr/local/binは私の2を残さない$PATHでしょうか?私はそう信じています。代わりに、デフォルトパスの順序/etc/pathsまたはの内容を編集する必要があるの/etc/paths.dだろうか?しかし、これはすべてのユーザーに影響します...おそらく悪いことではありません。とにかく、他の人々がこれにどのようにアプローチしているかを見たかっただけです。
メルテミ

@Meltemi、この答えの精神は正しいです:あなたがPATH(あなたの選んだ方法で)/usr/local/bin先行するように更新してください/usr/bin。ここに示さPATH.bash_profileているように、個人的に更新します。

@ Nick-おもしろい情報...そして問題(少なくとも私の問題)を混乱させるだけです... Homebrewのドキュメントは、ターミナルコマンドがパスをたどっ/usr/local/binていてもアプリをピックアップする必要があることを暗示しているようです/usr/bin。しかし、GUIアプリには特別な操作が必要ですか?ITは、GUIであろうとなかろうと、すべてのアプリが$ PATH変数を調整する必要があるように思えます。だから、私(またはHomebrewクリエイター)が何が欠けていますか?
メルテミ

Homebrewは、Appleが提供する実行可能ファイルを最初に使用することを想定していると思います-gitは、LionがAppleによって提供されなくなるまでの変更であるため、Homebrewが必要でした
-Appleを

これに関するマークに同意します。MacPortsとFinkでは、Appleが箱から出して提供するものとはまったく異なる、完全に純粋な環境を提供することが前提でした。Homebrewは、Appleのものは素晴らしいものであり、それを使用することを避けないというスタンスを取りました(Appleがそうする可能性があるのに、なぜgccの別のバージョンをダウンロードするのですか?)。
ニッククラウアー

6

jthomasの答えには同意しません。/ etc / pathsファイルを編集すると、すべてのプログラムのロードパスが変更されます。これは、システムアプリケーションが特定のバージョンのバイナリを見つけることを期待しているが、パスファイルを編集したために別のバージョンを見つける場合に危険です。代わりに、〜/ .bashrc(または〜/ .bash_profile)のパス変数を変更します。次に、ロードパスはターミナル内でのみ変更されます。

#homebrewアプリをPATHに追加
export PATH = / path / to / homebrew / app / bin:$ PATH

次にsource ~/.bashrc、bashまたはをリロードすると、準備完了です。homebrewパスは他の何かよりも前にあるため、bashはhomebrewでダウンロードしたバージョンをロードします。


OS Xでは、.bashrcデフォルトではロードされません。手動で調達していますか?
slhck

そうそう。私はUbuntuのからOS Xから来たと持つことに使用された.bashrcので、私は私からそれを調達します.bash_profile。rcファイルを作成したくない場合は、コマンドをに追加できます.bash_profile
ネイサン

5

私が理解しているように、Appleの分散実行可能ファイルと衝突する(同じ名前を持つ)brewものは何も入れません/usr/local/bin。したがって、持つ/usr/local/bin前に、パス内/bin/usr/binは名前の衝突があってはならないので、問題にはなりません。*ただし、との問題、lsおよびand (MacPorts)tarなどの他のパッケージアグリゲーターの使用方法については、下記をご覧ください。finkport

Brew 名前の衝突の管理に役立つ、私が知っている2つのことのいずれかを行います。

  1. Brewセラーにリンクされていない樽を残します。 ものをインストールするために、brewはツールをそのままにして、それらのツールへのシンボリックリンクを作成し/usr/local/binます。brew名前の衝突を必要としないツールの場合、シンボリックリンクは作成されません。
  2. /binおよび/usr/binにもある標準ツールのすべてではないにしても、多くの場合brew、リンクの先頭に/usr/local/bin「g」が付いているため、たとえばlsbrewバージョンで実行するには、を使用しますgls 単にls -lin /usr/local/binを実行し、リンクされたファイルを探します-それらはbrewそこに置かれたものです。注:brew実際の名前でアクセスする必要があるインストール済みツールは、にあります/usr/local/Cellar/coreutils/8.21/libexec/gnubin

私は/usr/local/bin2つの理由で自分の道に進まない-それらの理由は私の答えの一番下にある。

システム内の名前の衝突を評価するには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を処理していない、彼らはweren」 tはまったく処理しました。これは大きな問題であり、それを完全に回避するために、関連するmanページ構成の問題とともに、$PATH適切な設定をタグ付けするため、OSX関連するツール、特に/binand /usr/binにあるツールを最初に配置するようにします。

/usr/local/bin私が自分の道に全くbrew進まないもう一つの理由は、他の人とうまくプレイできないこと、finkそしてport(MacPorts)が私が必要とするより多くのサポートされたパッケージを持っているからです。たとえば、で取得できますgnome-terminalfink、式を作成してで同じことをするのは大きな努力brewです。だから、私は続ける/sw/opt私の検索で$PATH(のためにfinkport、それぞれ)と参照の事私はから必要/usr/local/bin含めて、gnatいずれかのスペルアウト、または私が使用bash alias「に秒、またはIは、ソース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ヶ月間破るのを許すことができますか!


有用な情報をありがとう。ただし、現在のシステムでは、注意として、/ usr / binと/ usr / local / binの両方に同じ名前の実行可能ファイルがあります(たとえば、gitはシンボリックリンクされています)。そのため、デフォルトでは競合します。また、シェル作業のためにシステムツールをオーバーライドしたいと思います。
rholmes

4

ここにはたくさんの良い答えがあります。これが私のものです:

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ため_、さらには@タイピングを節約します。


2

PATHをいじるのではなく(私の歴史では数か月後に焼き戻されます)、zshカスタムエイリアスディレクトリ(〜/ .zshrc / custom / git_alias.zsh)にgitのエイリアスを追加しました。

alias git='/usr/local/bin/git'


0

$PATH実際に変更が必要なユーザーのように、環境変数への変更を制限することを好みます。したがって、私は単純に次を追加します~/.bashrc

export PATH="$(brew --prefix)/bin:$PATH"

0

ターミナルで次のコマンドを発行できます。これにより、ブリューホームディレクトリ+ / binがSHELL "rc" initファイル(bash、zsh、csh)のPATHに追加されます。

echo "export PATH="'$PATH:$(brew --prefix)/bin' >> ~/.$(basename $SHELL)rc

楽しい !

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.