whileループ内でソースコードが機能しません。

whileループ内でソースコードが機能しません。

これはおそらく本当に愚かなことですが、どこでも答えを見つけることができません。プロセスをより体系的にするために.bashrc.dソースコードをインポートするスクリプトを含むディレクトリを設定してみました。.bashrcのすべてのスクリプトを手動でインポートするのではなく、.bashrc.d次の方法でインポートします。

if [ -d "$HOME/.bashrc.d" ]; then
    find "$HOME/.bashrc.d/" -type f -name "*.sh" | sort | \
        while read -r f; do
            source "$f"
        done
fi

しかし、source "$f"コマンドが実際にファイルをインポートしないため、サブシェル内で実行されているようです。の出力からわかるようにこれを実行しますset -xが、たとえば、変数のエクスポートは元の反復シェルに渡されません。また.bashrc、ファイルを手動でソーシングすることが実際に機能するため(問題は解決されませんが)でソーシングするのではなく、whileループ内でソーシングするのに問題があることも知っています。正確に何が起こり、この問題を解決するには?

ベストアンサー1

あなたは正しいです。あなたはsourceサブシェルで実行しています。この問題を解決するには、 find の出力をパイピングせずにファイルを繰り返すだけです。

for script in "$HOME"/.bashrc.d/*.sh
do
    if [ -r "$script" ]
    then
        . "$script"
    fi
done

おすすめ記事