使用 systemd 时,是否应该在 ~/.profile 或 ~/.bashrc 中声明环境变量?

使用 systemd 时,是否应该在 ~/.profile 或 ~/.bashrc 中声明环境变量?

在我看来就像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 初始化脚本更有限。

相关内容