Bash

將所有環境變數儲存在一個文件中

  • July 18, 2018

擁有一個帶有環境變數的文件有什麼注意事項?

我想做的是創建一個文件(例如~/.env),其中包含所有必要PATH的聲明和可能的其他非機密環境變數,例如EDITORand GOPATH,並讓該文件來自每個特定於 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.

引用自:https://unix.stackexchange.com/questions/456878