スクリプトの置かれているディレクトリのフルパスや名前を取得する方法。 スクリプトが在るディレクトリ以外から実行しても、正しく取得します。
カレントディレクトリのフルパス取得
実行場所に関係なく、スクリプトが置かれているディレクトリのフルパス取得は以下のようになります。
例 /work/test/dir/current.sh
#!/bin/bash CURRENT=$(cd $(dirname $0);pwd) echo $CURRENTこのスクリプトを実行すると、以下のようになります。
$ ./current.sh /work/test/dirスクリプトがあるディレクトリ以外から実行しても、同じ結果になります。
$ cd / $ /work/test/dir/current.sh /work/test/dirただし、スクリプト内でcdコマンドを使って移動すると、移動先ディレクトリのパスに変わります。 そのため、これはスクリプトのできるだけ先頭に置いたほうが良いでしょう。
-
移動先ディレクトリのフルパス取得
スクリプト内で、cdコマンドを使って移動後に移動先ディレクトリのフルパスを取得する場合は、移動後に同じコマンドを実行します。
#!/bin/bash CURRENT=$(cd $(dirname $0);pwd) echo $CURRENT # 1つ上のディレクトリに移動 cd .. PARENT=$(cd $(dirname $0);pwd) echo $PARENT上記サンプルを実行すると、以下のようになります。
./current.sh /work/test/dir /work/test2つ目は、cdで1つ上のディレクトリに移動後なので、移動先ディレクトリのパスに変わっています。
カレントディレクトリの名前取得
スクリプトの置かれているディレクトリ名が取得したい場合、sedを使って取得することができます。
#!/bin/bash CURRENT=$(cd $(dirname $0);pwd) echo $CURRENT DIR_NAME=`echo "$CURRENT" | sed -e 's/.*\/\([^\/]*\)$/\1/'` echo $DIR_NAME実行結果は以下のようになり、ディレクトリ名だけが取得できます。
./current.sh /work/test/dir dir