« Yahoo でカスタマイズされた PHP のまとめ | メイン | VMware Server がフリー »

2006年2月 1日

環境変数 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 に追加してくれるので、
いろんな環境で存在しそうなディレクトリを列挙しておけば、
自動的に必要なパスだけ残るようになっているわけです。

僕はこれですごくハッピーなのですが、
もし他に良い方法とかあったら、ぜひ教えてください!!

投稿者 masato : 2006年2月 1日 20:16

トラックバック

このエントリーのトラックバックURL:
http://blog.bz2.jp/bz2mt/mt-tb.cgi/111

このリストは、次のエントリーを参照しています: 環境変数 PATH を自動で設定する方法:

» LLはコンパイルして入れる from ベイエリア情報局
個人的な趣味ですが、LLはパッケージは使わずに手動でコンパイルしてインストールす... [続きを読む]

トラックバック時刻: 2008年5月 2日 02:08

コメント

コメントしてください




保存しますか?