それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

環境変数PATHの順番を整理して、衝突を避ける

環境変数PATHを追加する時、PATHに登場する順番が大事。
適当にbashrc に追記してたらカオスになる。

ヒューリスティクス に考えてパス文字列が長いほど優先度が高い。

自前のコマンドほど、PATHが長い。

/home/takuya/bin/vim  # 普段使い
/usr/local/bin/vim        # homebrew
/usr/bin/vim                 # OSX標準

ということです。
なので、「パス文字列の長さ」でパスの順番を整えてしまえば、bashrc の読み込み順に左右されずに済みそう

やってみた。

#重複登録はできるだけ避ける。
add_path(){
    path=$1;
    if [ -z ` echo $PATH | sed   s/:/\\\n/g |  /bin/grep -e ^$path` ]  ; then
        export PATH=$path:$PATH;
    fi
}

export LANG=ja_JP.UTF-8
#export PATH=~/bin:$PATH
add_path /usr/local/bin
add_path /bin
add_path /usr/local/sbin
add_path /usr/bin

#ソートする。
if [ -x /usr/bin/ruby ] ;then
export PATH=$(ruby -e "puts '$PATH'.split(/:/).sort{|a,b| -(a.size <=> b.size)}.join(':')")
fi

あれこれ試したけど結局ruby です。ええ、負けた気がするけどコレでいいと思いました。