我什么时候应该使用 .bashrc,什么时候应该使用 .profile?

我什么时候应该使用 .bashrc,什么时候应该使用 .profile?

我基本上将所有设置放入我的 .bashrc 中,当我使用 zsh 时,它都在我的 .zshrc 中。

Rust 安装程序刚刚通知我,它已通过修改 .profile 将新安装添加到我的 PATH 中。

事情应该什么时候进行~/.profile

这样做只是因为它不知道我正在使用哪个 shell 还是所有一般设置都应该在 .profile 中?

答案1

.profile被每个登录 shell 读取,.xxxrc被每个交互式 shell 读取后读取.profile

您需要根据自己想要添加的内容来决定。

一个好主意是将设置导出环境变量并因此传播到子 shell 的所有内容放入 .profile 中。

未传播的内容应位于 .bashrc 或您的 shell 查找的任何内容中。例如,这就是别名和函数定义。

答案2

Bash 对于运行哪些脚本以及何时运行有一个相当复杂的逻辑。

但它主要归结为:

  • 如果您的设置是从父进程继承给子进程(环境变量, ulimits),通常每次登录时只需设置一次,因此将它们放入.profile而不是放入.bashrc.
  • 如果您有两者的设置遗传添加剂PATH(例如,使用诸如 之类的构造将某些内容添加到 的现有值中PATH=$PATH:/some/directory),然后放入这样的设置.bashrc将导致每当您启动另一个 shell 进程时都会发生第二次添加,这将是愚蠢且浪费的。例如,如果您设置PATH=$PATH:/some/directoryin .bashrc,它在您的主 shell 中工作得很好。但是,当您启动编辑器然后使用其 shell 转义功能时,您可能会发现您的 PATH 现在具有类似 的值...:/some/directory:/some/directory。每层子 shell 都会再次将该目录添加到 PATH 中。可继承的附加设置通常最好放置在.profile.
  • 如果您的设置是不遗传的在常规进程之间,例如 shell 别名或函数,您需要在.bashrc.如果您在 中定义了它们.profile,您可能会发现它们在各种应用程序中使用 shell 转义功能启动的 shell 中不可用。 (这也意味着您可能需要.bashrc在您的末尾添加一个命令来获取您的源.profile,以便会话的主登录 shell 也将获得这些定义,除非您的发行版的标准/etc/profile或默认.profile已经提供了该功能。)

使用图形用户界面时,又增加了一种复杂性。 GUI 会话通常会获取.profile登录时的内容或等效内容(因为相应的会话启动脚本作为登录 shell 运行),因此在那里所做的任何可继承设置通常都会被桌面环境继承,反过来,任何可继承的设置也将被桌面环境继承。使用桌面图标或菜单启动的应用程序。

X11 GUI 会话中的任何终端窗口都可以通过以下两种方式之一进行设置:

  • 完全独立的终端会话:每个终端窗口都被视为独立的登录会话,并且环境是根据终端仿真器进程内 shell 的一些基本系统范围默认值构建的。在这种情况下,每个新的终端窗口都将作为登录 shell 运行,因此.profile在打开时将执行或等效操作。
  • 每个终端窗口都被视为主 GUI 登录会话的一部分:在这种情况下,终端窗口内的 shell 作为非登录 shell 启动,并且只会执行.bashrc或等效。可继承的设置是通过桌面环境/窗口管理器进程从主 GUI 登录会话继承的。

相关内容