ソースbashスクリプトパスを取得する

ソースbashスクリプトパスを取得する

私が試した簡単なスクリプトは次のとおりです。

#!/bin/bash DIR="$(cd "$(dirname $0)" && pwd)" echo $DIR

実行すると、$ ./my_script.shパスが正しく取得されます。
ただし、これを行うと$ source my_script.shパスが表示されます。/bin

ソースからスクリプトパスを取得する方法は?
ソースコードと実行コードの違いは何ですか?

ベストアンサー1

スクリプトのインポートと「実行」の違いは、スクリプトをインポート(sourceまたは使用.)すると、現在のシェル環境でスクリプトが実行され、「実行」が新しいシェルプロセスを開始することです。ソーススクリプトが現在のシェル環境を変更したいと思います。別のシェルプロセスで実行されるスクリプトは、次のことができます。いいえ親シェルの環境を変更します。 「環境」とは、シェルと環境変数の値、現在の作業ディレクトリなどを意味します。

スクリプトはソースコードを取得したり、独自のシェル環境で実行するために書かれていることがよくありますが、両方を実行することはほとんどありません。ソースをインポートするスクリプトは「ドットスクリプト」とも呼ばれます(.そのスクリプトをインポートする標準コマンドであるため、「エイリアス」であるsourceため)。bash.

シェルから取得したドットスクリプトは、bash配列の最初の要素を確認して位置を見つけることができますBASH_SOURCE

printf 'My location: %s\n' "$( dirname "${BASH_SOURCE[0]}" )"

ディレクトリパスは、呼び出し時sourceまたは.スクリプトの現在の作業ディレクトリに基づいています。

おすすめ記事