web-dev-qa-db-ja.com

DIR = "$(cd" $(dirname "$ {BASH_SOURCE [0]}") "&& pwd)"それはどのように機能しますか?

スクリプトのパスを取得する必要があります。すでに同じディレクトリにいる場合、pwdを使用してそれを行うことができます。オンラインで検索し、これを見つけました

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

しかし、私はそれを使用する方法はありません。

32
Anirudh

Bashは、ソースファイルのパス名の配列である_BASH_SOURCE_を含む多くの変数を保持しています。

_${}_は、変数の引用の一種として機能します。

$()は、コマンドの一種の引用として機能しますが、独自のコンテキストで実行されます。

dirnameは、提供された引数のパス部分を提供します。

cdは、現在のディレクトリを変更します。

pwdは現在のパスを示します。

_&&_は論理的なandですが、このインスタンスではコマンドを次々に実行する副作用のために使用されます。

要約すると、そのコマンドはスクリプトのソースファイルのパス名を取得し、パス部分だけを削除し、cdsをそのパスに削除し、pwdを使用してスクリプトの(実質的に)フルパスを返します。これはDIRに割り当てられます。その後、コンテキストは巻き戻されるため、スクリプトのパスを含む環境変数DIRを使用して開始したディレクトリに戻ります。

36
Ouroborus