いくつかのOSで実験したけれど、POSIX準拠ならこれで十分だった。
#!/bin/sh
case "$0" in
./*) SCRIPTNAME="$(pwd)/${0#./}";;
/*) SCRIPTNAME="$0";;
*) SCRIPTNAME="$(pwd)/$0";;
esac
SCRIPTDIR="${SCRIPTNAME%/*}"
echo $0
echo $SCRIPTNAME
echo $SCRIPTDIR
Solaris の /bin/sh は、おそらくSystem V 由来の、POSIX 以前の Bourne shell なので、これじゃないとだめだった。
#!/bin/sh
case "$0" in
./*) SCRIPTNAME="`pwd`/$0";;
/*) SCRIPTNAME="$0";;
*) SCRIPTNAME="`pwd`/$0";;
esac
SCRIPTDIR="`dirname \"$SCRIPTNAME\"`"
echo $0
echo $SCRIPTNAME
echo $SCRIPTDIR