スクリプト自体のパス名を出力する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]}
最後の要素を見てください。
スクリプトをインポートしても、スクリプトの内容はデフォルトのスクリプトに正確にコピーされません。これは良い通常のスクリプトを実行しますが、基本スクリプトと同じ環境で実行されます。関数の実行に似ています。