.foo.sh
エクスポートのみを含むファイルがあります。
export foo="../../../../"
export bar="a/b/c/d/"
export baz="a/b/c/d/e/f"
スクリプトでは、ファイルのソースは次のとおりです(スクリプトの他のものもそれに影響しないことを確認し、テストスクリプトはこれだけを実行します)。
!#/bin/bash
cd u/v/x/y/z/
source .foo.sh
ただし、環境変数が正しく設定されていません。echo "foo $foo bar $bar baz $baz"
ソーシングの前後に追加すると、次の結果が表示されます。
foo bar baz
foo . bar .. baz ../e/f
追加すると、cat .foo.sh
スクリプトは次のように表示されます。
!#/bin/bash
cd u/v/x/y/z/
cat .foo.sh
echo "foo $foo bar $bar baz $baz"
source .foo.sh
echo "foo $foo bar $bar baz $baz"
私は次のような結果を得ます。
export foo="../../../../"
export bar="a/b/c/d/"
export baz="a/b/c/d/e/f"
foo bar baz
foo . bar .. baz ../e/f
ソース行を次の内容に置き換えると.foo.sh
:
!#/bin/bash
cd u/v/x/y/z/
echo "foo $foo bar $bar baz $baz"
export foo="../../../../"
export bar="a/b/c/d/"
export baz="a/b/c/d/e/f"
echo "foo $foo bar $bar baz $baz"
私は次のような結果を得ます。
foo bar baz
foo ../../../../ bar a/b/c/d/ baz a/b/c/d/e/f
ソースファイルがCWDにあり、エクスポートされたパスがハードコードされた文字列ですが、インラインでのみエクスポートする場合と比較してソースファイルにエクスポートすると、パスが他のディレクトリに比較的変更されるのはなぜですか?
ベストアンサー1
.foo.sh
myにリストされているディレクトリにPATH
同じ変数をエクスポートしますが、異なる値を持つファイルがあります。通常のコマンドを実行するのと同じように、ファイルをインポートすると、シェルは最初にPATH
。which .foo.sh
実行ファイルのように何も返されないことを考慮すると、さらに混乱しています。しかし、スクリプトをこのようなソースに変更することでsource ./.foo.sh
問題は解決しました。