1. カレントディレクトリのフルパス取得
  2. カレントディレクトリの名前取得

    スクリプトの置かれているディレクトリのフルパスや名前を取得する方法。 スクリプトが在るディレクトリ以外から実行しても、正しく取得します。

    カレントディレクトリのフルパス取得

    実行場所に関係なく、スクリプトが置かれているディレクトリのフルパス取得は以下のようになります。

    例 /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/test
      2つ目は、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