将所有环境变量存储在一个文件中

将所有环境变量存储在一个文件中

使用带有环境变量的单个文件有哪些注意事项?

我想要做的是创建一个文件(例如~/.env),其中包含所有必要的PATH声明和可能的其他非机密环境变量,例如EDITORGOPATH,并让该文件源自每个特定于 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 声明的一些建议做法。但是,我想知道上述方法是否也可以接受且安全。

答案1

唯一的问题是,如果您从 和 获取文件.bash_profile.bashrc并且这两个文件互相获取文件(对于其他 shell 也是如此),那么您在启动 shell 会话时可能会多次(两次)获取环境文件。

这不是问题,除非你附加/前置环境变量的值。

env_sourced您可以通过设置 shell 变量(例如文件中的某个值)然后在顶部测试它来防止这种情况:

# My environment file

[ -n "$env_sourced" ] && return
env_sourced=1

PATH="$PATH:/some/path"
# etc.

答案2

我不明白你为什么不应该这样做。例如,我在混合 bash/zsh 环境中工作(即我在一些终端窗口中使用 bash,在一些 zsh 中使用)。我将这些定义(环境变量、非导出变量、shell 函数)放在一个公共文件中,这些定义在语法上与两种语言兼容,该文件是从 .bashrc 和 .zshrc 获取的。

相关内容