環境変数 PATH を自動で設定する方法
みなさんは UNIX系 OS で環境変数 PATH の設定をどうしてますか?
UNIX系 OS では微妙にディレクトリ構成が違ってたり、
同じ OS でも後から追加したパッケージの関係で PATH が違ってたりして面倒です。
僕の場合、環境変数 PATH は自動で設定するようにしているので、
ほとんど数年間シェルの設定は変わっていません。
すごく便利なので、僕が使ってる方法を紹介します。
まずは次のようなシェル関数を定義する。
function add_env(){
env_name=$1
shift
for i in $@; do
if ! dirs=`eval echo $i` > /dev/null 2>&1; then
continue
fi
for i in `eval echo $dirs`; do
if eval echo \$$env_name | egrep '(\:|^)'$i'(\:|$)' >/dev/null 2>&1; then
continue
fi
if [ -d $i ]; then
eval $env_name=\$$env_name:$i
fi
done
done
}
この関数は受け取った第2引数以降(複数可、メタキャラクタ指定可)を評価して、
ディレクトリだったら第1引数で指定した変数に追加するという処理を行います。
あとはこんな感じで環境変数に追加したい候補を列挙するだけ。
PATH=
add_env PATH "${HOME}/bin" "${HOME}/sbin"
add_env PATH "${HOME}/opt/*/bin" "${HOME}/opt/*/sbin"
add_env PATH "/usr/local/bin" "/usr/local/sbin"
add_env PATH "/usr/local/*/bin" "/usr/local/*/sbin"
add_env PATH "/opt/local/bin" "/opt/local/sbin"
add_env PATH "/opt/local/*/bin" "/opt/local/*/sbin"
add_env PATH "/opt/*/bin" "/opt/*/sbin"
add_env PATH "/usr/ucb"
add_env PATH "/bin" "/sbin"
add_env PATH "/usr/bin" "/usr/sbin" "/usr/*/bin" "/usr/*/sbin"
自動的に存在するディレクトリだけ $PATH に追加してくれるので、
いろんな環境で存在しそうなディレクトリを列挙しておけば、
自動的に必要なパスだけ残るようになっているわけです。
僕はこれですごくハッピーなのですが、
もし他に良い方法とかあったら、ぜひ教えてください!!