はじめに
gnu系コマンドもhomebrewでただ単にインストールするにはbrew install hoge
でよいのですが、
このままではコマンドの先頭にgが付きます(例: ggrep
)
元の名前で使えるようにする方法についてまとめました。
また、homebrewでのコマンド等のインストールには、
- ビルド済みバイナリが提供される場合(bottledと呼ばれます)
- ユーザーがソースコードからビルドする必要がある場合
の二つがあることを念頭におく必要があります。
当たり前ですがビルドオプション付きでインストールする際には後者となります。(例: HTTP/2対応のcurl
)
3つの方法
現状で私が確認した解決法です。
aliasを記述
.bash_profile
や.zshrc
に次のように記述しておきます。
alias grep='ggrep'
この方法は簡単ですがコマンドの数が多いと正直めんどくさいです。
--with-default-namesをつけてインストールする
だいたいググるとこの方法が出てきます。
brew install hoge --with-default-names
この方法が使えないものもあるのでbrew info hoge
でチェックしておきましょう(coreutils
など)
一見するとこの方法がベストなようですが、このオプションは"元の名前でインストールする"(元の名前のバイナリを用意する)という意味です。
つまりビルド済みバイナリが提供されている場合でもソースコードからビルドするのでちょっと時間がかかるという欠点があります。
ビルドオプションをつけたいときや、時間がかかってもいいから後述のパスを通すのがめんどくさい人はこの方法が良さそうです。
PATHを通す
私のお勧めです。
しかし、注意すべき点としてPATHを通すという性質上、よく使うであろう**which
コマンドの結果も変わってしまいます**。
前述のaliasの場合はwhich
の結果は元のままです。
この方法はhomebrewが元の名前で各コマンドへのシンボリックリンクを/usr/local/opt/hoge/libexec/gnubin
以下に置いてくれる場合に使えます。
brew info hoge
でそのような記述が有れば可能です。
例えばgnu-tar
であればこのような感じに書いてあります。
~$ brew info gnu-tar
gnu-tar: stable 1.30 (bottled)
GNU version of the tar archiving utility
https://www.gnu.org/software/tar/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/gnu-tar.rb
==> Options
--with-default-names
Do not prepend 'g' to the binary
==> Caveats
gnu-tar has been installed as "gtar".
If you really need to use it as "tar", you can add a "gnubin" directory
to your PATH from your bashrc like:
PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"
Additionally, you can access their man pages with normal names if you add
the "gnuman" directory to your MANPATH from your bashrc as well:
MANPATH="/usr/local/opt/gnu-tar/libexec/gnuman:$MANPATH"
このgnu-tar
の例であれば.bash_profile
や.zshrc
に次のように記述しておきます。(ついでにマニュアルのパスも)
export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"
export MANPATH="/usr/local/opt/gnu-tar/libexec/gnuman:$MANPATH"
ちょっとめんどくさいですがたくさんのコマンドにエイリアスを張るよりはマシですね。
手元でビルドする必要もありません。
余談ですがパスを通す時は優先順位に注意しましょう。
/usr/bin
よりも高い優先順位が必要です。