Homebrewはすごい便利なんですけどよくWarningに悩まされてる気がします。今回は先日インストールした pyenv が原因のようです。
Warningの内容
内容としてはHomebrewの管理外な*-config
ファイルがあると衝突おこすかもよという警告みたいです。確かに.pyenv
以下はHomebrewでインストールしてるものではないですからね。これがどのように使われるのかは分かりませんが対処してWarningを消す事にします。
$ brew doctor
Warning: "config" scripts exist outside your system or Homebrew directories.
`./configure` scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
compiling and linking.
Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew provided
script of the same name. We found the following "config" scripts:
/Users/tasukujp/.pyenv/shims/python-config
/Users/tasukujp/.pyenv/shims/python2-config
/Users/tasukujp/.pyenv/shims/python2.7-config
/Users/tasukujp/.pyenv/shims/python3-config
/Users/tasukujp/.pyenv/shims/python3.4-config
/Users/tasukujp/.pyenv/shims/python3.4m-config
対処方法を調べるとすばらしい解決策が見つかりましたので参考にさせていただきました。
homebrew - phpenv入れてる時brew doctorしたら出るWarning消した - Qiita
内容としてはこれだけです。.bash_profile
に alias を追加します。
echo 'alias brew="env PATH=${PATH/\/Users\/tasukujp\/\.pyenv\/shims:/} brew"' >> .bash_profile
再起動してbrew doctor
で再度確認。
$ brew doctor Your system is ready to brew.
対処内容の説明
これだとコピペしただけになってしまうので、何をやってるのかという説明を追加しておきます。しかし、これ考えた人のようにスマートなやり方が出来るようになりたいですね。
まず、やってる事としては brew コマンド実行前に PATH から~/.pyenv/shims
を削除して実行させています。こうする事でWarningの原因である*-config
ファイルがパスの通ってない状態になるわけですね。
ただし本当に PATH から削除してしまうとその後が困りますのでenv
コマンドが使われてます。
envの使い方
env は実行するコマンドに対して環境変数を一時的に設定してくれるものです。オプション無しで env 単体を実行すると環境変数の一覧が出力されます。
基本的な構文と今回の対処内容は次の通りです。[option]は使ってません。
$ env [option] [name=value] [command] $ env PATH=${PATH/\/Users\/tasukujp\/\.pyenv\/shims:/} brew
brew コマンドの alias に env を設定する事で一時的に PATH から~/.pyenv/shims
を削除した後に brew コマンドを実行してくれます。そのため、実行後の PATH を確認しても~/.pyenv/shims
は消えていません。
$ brew doctor Your system is ready to brew. $ echo $PATH /Users/tasukujp/.nodebrew/current/bin:/Users/tasukujp/.pyenv/shims:/Users/tasukujp/.rbenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Linuxコマンド集 - 【env】環境を変更してプログラムを実行する
PATHの消し方
どうやって PATH から~/.pyenv/shims
だけを削除しているのかというとシェルの変数展開が使われています。次の部分です。
${PATH/\/Users\/tasukujp\/\.pyenv\/shims:/}
知らない人が見ると意味不明な一文だと思いますが、基本構文は次のようになっており、変数の <pattern> に一致する部分が <string> に置換されます。
${変数/<pattern>/<string>}
今回の場合は <pattern> しか書かれていませんが、<string> が省略されると <pattern> にマッチした部分は削除されるため、このような使い方ができます。ちなみに\(バックスラッシュ)
はPATHの/
を認識させるためにつけられています。