「echo ${BASH_SOURCE[0]}」を含むスクリプトをインポートすると、ソーススクリプトのパス名が表示されます。

「echo ${BASH_SOURCE[0]}」を含むスクリプトをインポートすると、ソーススクリプトのパス名が表示されます。

スクリプト自体のパス名を出力するbashスクリプトがあります。

$ cat f4.sh 
#! /bin/bash    
echo "${BASH_SOURCE[0]}"

別のスクリプト内にスクリプトをインポートして別のスクリプトを実行すると、他のスクリプトのパス名が出力されると思いました。これは、getスクリプトの内容をgetスクリプトにコピーしてgetスクリプトを実行するのと同じです。

しかし、私が間違っています。それでも元のスクリプトのパス名を出力します。

$ cat ff.sh 
#! /bin/bash
source ../f4.sh

$ bash ff.sh 
../f4.sh

なぜ?

他のスクリプトからパス名を直接出力するのではなく、f4.shを使用できるかどうか疑問に思います${BASH_SOURCE[0]}。ありがとうございます。

ベストアンサー1

この場合、メインスクリプトのパス名を取得するにはをBASH_SOURCE使用する必要があります${BASH_SOURCE[1]}

各調達レベルに新しい要素が追加されます。スタート配列BASH_SOURCEなので、${BASH_SOURCE[0]}常に現在のソースファイルとその${BASH_SOURCE[1]}ソースファイル(および${BASH_SOURCE[2]}そのソースファイル)です。それソースの場合はソース)。基本的なスクリプトを理解するには、${BASH_SOURCE[-1]}最後の要素を見てください。

スクリプトをインポートしても、スクリプトの内容はデフォルトのスクリプトに正確にコピーされません。これは良い通常のスクリプトを実行しますが、基本スクリプトと同じ環境で実行されます。関数の実行に似ています。

おすすめ記事