次のファイルはディレクトリにあります。
path/to/file.sh
path/to/file2.sh
file2.sh
内部通話はfile.sh
次のように機能します。
path/to/file.sh
. ./path/to/file2.sh
ただし、ファイルが別のディレクトリからチェックアウトされると、次のようになります。
src/path/to/file.sh
src/path/to/file2.sh
file.shはfile2を見つけることができません。
考えられる解決策
1つの可能性は、特定のディレクトリが存在することを確認することです。
path/to/file.sh
if [ -d "src" ]; then
. $PWD/src/path/to/file2.sh
else
. $PWD/path/to/file2.sh
fi
ただし、別のディレクトリにあるファイルをチェックアウトすると、この問題が再発生します。
質問
ディレクトリ構造とは独立して動作するソリューションは何ですか?
答え1
source "$(dirname -- "$0")/file2.sh"
ソースコードはfile2.sh
呼び出しスクリプトと同じディレクトリにあります。