mattintosh note

どこかのエンジニアモドキの備忘録

bash で PATH が伸びるアレ

ビルド専用のシェルプロファイルを書いていてふと思ったのでつらつらと。

Mac で bash 使ってた頃、

export PATH=/opt/local/bin:/opt/local/sbin:$PATH

みたいな感じで書いてた(MacPorts 使っている場合の例)んだけど、これで echo すると…

/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin

になる。だけど source コマンドとかでプロファイルを再読みしたり再ログインすると…

/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin

になる。bash を覚え始めたときは「bash のバグだ〜」なんて記事を見かけたような気がして(?)、あまり気にしてなかったけど考えてみたら当たり前の挙動だった。

だって $PATH って書いてるもんね………。

もしパスを自分で管理するなら、

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

と書けば1行目でパスを初期化しているのでパスは伸びない。行数は増えるけどコロンで繋げる手間も省ける。

あとは /etc/paths とか /etc/paths.d に書いておいて /usr/libexec/path_helper を実行するようにするとかかね。


と、久しぶりに bash を使って気づいた(遅