page_adsence

2011年5月20日金曜日

シェルスクリプトで自分自身のパスを調べる方法

PHPで実行しているスクリプトのディレクトリを取得する場合は、

dirname(__FILE__);


と書くことで取得できますが、シェルの場合はどうやって取得するのかわからなかったので調べてみた。
で、取得方法としては以下の通り。

$ vi test.sh
BASE_DIR=`dirname $0`
echo $BASE_DIR


で実行されているシェルのディレクトリを取得することができる。
しかし、これをこのままechoするとなんだか残念な気分にならざるを得ない。
実行すると以下のようなレスポンスが返ってくる

$ ./test.sh
.


なんて残念な…。
「.」だけです。
相対パスで返ってくる。
もうちょっと調べてみると、こういう取り方をすればいいのかという記事がありました。
その方法は、

$ vi test.sh
BASEDIR=`cd \`dirname $0\`; pwd`
echo $BASE_DIR


ものすごく納得しました。
確かにこの方法であれば、シェルが実行されているディレクトリを絶対パスで指定することができます。
これで環境が変わっても、ディレクトリ構成さえ一緒であれば、問題無く使えます。