web-dev-qa-db-ja.com

コンテナディレクトリをより簡単に取得

ここにbashスクリプトがあります:

$GOPATH/
     src/
     build.sh

そしてbuild.shに私は持っています:

export GOPATH="$(cd $(dirname "$BASH_SOURCE") && pwd)"

build.shの含まれているディレクトリを取得するより短い方法はありますか?

1
Alexander Mills

スクリプトが配置されているディレクトリを取得するには、次を使用します。

readlink -f $(dirname $0)

Bashのmanページで述べたように、$0はファイルの名前に設定されます。

readlink -fはそのディレクトリの絶対パスを取得します。

2
oliv

BASH_SOURCEのアイデアを拡張し、絶対パスが含まれているかどうかを確認します。その場合は直接使用し、そうでない場合はPWDを追加します。その後、末尾のスラッシュとそれに続くものをすべて取り除き、含まれているディレクトリだけを残します。

case ${BASH_SOURCE[0]} in
  ( /* )
        p=${BASH_SOURCE[0]}
        ;;
  ( * )
        p=${PWD}/${BASH_SOURCE[0]}
        ;;
esac

p=${p%/*}
printf "%s\n" "$p"
0
Jeff Schaller