在我看来就像environment.d
现在采购环境变量,因为~/.config/environment.d/*.conf
我们不应该再在~/.bashrc
或~/.profile
等中声明环境变量。如果没有其他原因,只是因为这些声明可以用特定于 shell 的语法编写。
这个假设正确吗?在具有environment.d的机器上是否有任何理由将我们的环境变量(不是特定于shell的)放入我们的shellrc
文件或中~/.profile
?
答案1
这些文件有不同的用途,但仍然是互补的:
environment.d
定义systemd 用户服务的变量;.bashrc
,如果它定义了变量,则为任何交互式、非登录的 Bash 实例定义它们;.profile
,如果它定义了变量,则为 Bash(和其他 shell)的任何交互式登录实例定义它们。
.bashrc
因此,在和/或中设置变量.profile
可以保证在任何相应的 shell 实例中设置它们。在文件中设置变量environment.d
可以保证在任何相应的用户服务实例中设置它们,这些实例可能包括 shell,但也可能不包括(并且可能有其他中间层,请参阅 参考资料sshd
)。
我看到的另一个区别是,更改.bashrc
或.profile
将在此后启动的任何 shell 中产生效果;仅当重新加载或重新启动用户会话和相关服务时,更改environment.d
才会生效。
作为穆鲁评论中提到,environment.d
文件的功能比 shell 初始化脚本更有限。