シナリオは次のとおりです。
foo/
> data/
> stuff/
> scripts/ -> /.../generic/scripts
任意の場所(別のフォルダまたはフォルダ内)から呼び出されたときにfoo/scripts/bar.sh
スクリプトを使用できるようにしたいですfoo/data
。foo/stuff
しかし、ちょうど使用すると、foo_dir='dirname $0'/..
シンボリックリンクが指すディレクトリに移動します! (そしてgeneric
代わりに入手してくださいfoo
!)
一部のパターンを使用して最後を食べると、$0
ディレクトリ内でスクリプトを呼び出すことができるため、機能しません。
だから結局私が見つけた唯一のことは、次のような非常に醜いものでした。
dir=`dirname $0`
cd $dir
dir=`pwd | sed -r 's_/[^/]+$__'`
cd -
...しかし、もっと良い方法があると確信しています。
私が使用するもの:
dir=$( dirname $( cd `dirname $0`; pwd ) )
完璧かどうかはわかりませんが、期待したほどの性能を発揮するようです。
ベストアンサー1
次の1行を使用できます。
DIR="$(cd "$( dirname "$0" )" && pwd )"