スクリプトから.bashrcをインポートすると、環境変数は更新されません。

スクリプトから.bashrcをインポートすると、環境変数は更新されません。

すぐに使用し、後で使用するために環境変数を.bashrcに頻繁に挿入し、ソースを使用して.bashrc環境変数を更新する長いインストールスクリプトがあります。しかし、これは期待どおりに機能しませんでした。端末で独立して実行する場合とは異なり、これらのコマンドをスクリプトとして一緒に実行すると、現在の環境は更新されません。

以下は小さな例です。

echo export TEST_BASH=sup >> ~/.bashrc
source ~/.bashrc
echo $TEST_BASH

最後の行は、期待どおりに「sup」の代わりに空白で印刷されます。なぜそんなことですか?

ベストアンサー1

ファイル~/.bashrcが対話型または非対話型シェルから取得されたかどうかがテストされます。

case $- in
    *i*) ;;
    *) return ;;
esac

このファイルがスクリプト(非対話型シェル)で開始されると、分岐が行われ、returnファイルは最後まで実行されません。

exportファイルの末尾にステートメントを追加することは、スクリプトから起動したときにステートメントが実行されないことを意味します。

解決策は、exportステートメントを別々のファイルに作成し、そのファイルをスクリプト(~/.bashrcまたは必要と思われる場合はスクリプト)から取得することです。

おすすめ記事