Bash
將所有環境變數儲存在一個文件中
擁有一個帶有環境變數的文件有什麼注意事項?
我想做的是創建一個文件(例如
~/.env
),其中包含所有必要PATH
的聲明和可能的其他非機密環境變數,例如EDITOR
andGOPATH
,並讓該文件來自每個特定於 shell 的點文件。具體來說,我想包括該行
. "$HOME/.env"
對所有
.profile
,.bash_profile
,.bashrc
,.zprofile
,.zshenv
,.zshrc
目標是在互動式/非互動式和登錄/非登錄 shell 中執行的命令具有一致的行為。
為什麼我不想這樣做?有沒有可能因此而出現的問題?
我已經閱讀了一堆與該主題相關的 SE 答案,例如
https://superuser.com/a/187673/924981
https://askubuntu.com/a/540689
https://askubuntu.com/a/866240
https://stackoverflow.com/q/14637979/3885799
我了解 env 聲明的一些建議做法。但是,我想知道上述方法是否也可以接受和安全。
唯一的問題是,如果您同時從
.bash_profile
和獲取文件.bashrc
,並且如果這兩個文件相互獲取(對於其他 shell 也是如此),那麼您可以在啟動 shell 會話時多次(兩次)獲取環境文件。除非您將值附加/預先添加到環境變數,否則這不是問題。
env_sourced
您可以通過將 shell 變數設置為文件中的某個值然後在頂部對其進行測試來防止這種情況:# My environment file [ -n "$env_sourced" ] && return env_sourced=1 PATH="$PATH:/some/path" # etc.