すぐに使用し、後で使用するために環境変数を.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
または必要と思われる場合はスクリプト)から取得することです。