ファイルをインポートすると、エクスポートされた環境変数のパスが変更されるのはなぜですか?

ファイルをインポートすると、エクスポートされた環境変数のパスが変更されるのはなぜですか?

.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.shmyにリストされているディレクトリにPATH同じ変数をエクスポートしますが、異なる値を持つファイルがあります。通常のコマンドを実行するのと同じように、ファイルをインポートすると、シェルは最初にPATHwhich .foo.sh実行ファイルのように何も返されないことを考慮すると、さらに混乱しています。しかし、スクリプトをこのようなソースに変更することでsource ./.foo.sh問題は解決しました。

おすすめ記事