シェルスクリプトなどで、「今自分自身が設置されているディレクトリ」を取得したいと いうことはよくある。その後の処理を全てスクリプト位置からの相対パスで行うことで、 設置位置やカレントディレクトリとの依存関係を切り離すためだ。
そんなときは、次のようにすると取得できる。それぞれ SCRIPTDIR 変数(or 定数)に結果が格納される。
sh
SCRIPTDIR=$(cd -P $(dirname $0) && pwd -P)
PHP
define('SCRIPTDIR', realpath(dirname($argv[0])));
Perl
use File::Basename;
use Cwd 'realpath';
my $SCRIPTDIR = realpath(dirname($0));
Python
import os.path
import sys
SCRIPTDIR = os.path.realpath(os.path.dirname(sys.argv[0]))
とりあえず手元で試す限りではシンボリックリンク等もそれぞれ上手く処理してくれるようだ。
一部、対話モードで起動中の場合等はそもそも関数が失敗したり、実行バイナリの位置が 取得できたり等あるようだが、まあその場合そもそも「スクリプト位置」ってなんぞ? という話なので大目に見てもらいたい。
Windows環境では試していないが、見ての通りdirnameとrealpathを呼んでいるだけなので、 きっと上手くやってくれると思う。