应该使用哪些配置文件来设置 bash 环境变量?

应该使用哪些配置文件来设置 bash 环境变量?

当我问并得到答案时这里, 和这里,PATH 变量具有不同的路径名,具体取决于应用程序的激活方式。

  • 无论我如何使用 bash 启动软件,都应该使用哪些安装文件(.bashrc、.profile 等)来具有相同的 PATH 变量?

答案1

传统上,在 unix 系统上定义每个用户的环境变量的地方是~/.profile。此文件由登录 shell(即,登录时启动的程序,您可以在其中键入命令)读取,前提是登录 shell 是与 Bourne 兼容的 shell。

Bash 是一个兼容 Bourne 的 shell。当它作为登录 shell 调用时,它会读取~/.bash_profile此文件是否存在,~/.profile如果~/.bash_profile不存在则读取。

根据经验法则,如果您在文本模式下输入密码(例如,在文本控制台上,或使用 ssh 远程输入),那么您获得的 shell 就是登录 shell。

但是,如果您在图形程序中输入密码并登录到图形环境,这将绕过正常的登录 shell。.profile在这种情况下是否读取取决于图形会话的设置方式;例如,它在不同的 Linux 发行版、不同的显示管理器和不同的桌面环境之间有所不同。有时链中的某个程序会明确调用登录 shell;有时其中一个程序会明确读取~/.profile;有时这些都不会发生,也~/.profile不会被读取。

举一个可变性的例子,据我快速浏览一下所涉及的脚本,在 Ubuntu 10.04 上:如果您使用 kdm 或 lxdm 登录,则~/.bash_profile如果存在则读取,~/.profile否则;如果您使用 gdm 登录,则只会~/.profile读取;如果您使用 xdm 登录,~/.profile则不会读取。

我知道的所有系统都提供了设置每个用户环境变量的方法。不幸的是,没有通用的答案。

请注意,有时您会看到建议在 中设置环境变量~/.bashrc,或者在 GUI 环境中在每个终端中启动登录 shell。这两种做法都不是好主意;原因之一是您遇到的问题,即您的环境变量仅在通过终端启动的程序中可用,而不在直接通过图标、菜单或键盘快捷键启动的程序中可用。

答案2

明确的答案在 bash 手册页部分Bash 启动文件. “当启动非登录 shell 的交互式 shell 时,如果该文件存在,Bash 将从 ~/.bashrc 读取并执行命令。”

回答您的其他问题时指出 eshell 实际上不会运行bash。Emacseshell不会bash。假设eshell会加载与假设或会加载.bashrc一样错误。它是一个不同的 shell。zshcsh.bashrc

我看到两个选择:

  1. 创建您自己的脚本,该脚本获取目录列表并生成适当的 bash 代码bash和 elisp 代码eshell
  2. 设置你的 ESHELL 或 SHELL 环境变量,以便你实际上在 emacs 中使用 bash。我就是这么做的。Bash 在 emacs 中运行良好。

您可能还对以下讨论感兴趣将目录添加到没有重复的路径

答案3

在 ~/.profile 中设置 PATH 应该可以正常工作。我知道的每个 POSIX 兼容或类似 Bourne 的 shell(包括 bash)在登录时都会读取该文件。如果您对该文件进行了更改,则必须注销并重新登录才能使更改生效。由于 PATH 是登录过程环境的一部分,因此应该将其导出到您随后启动的每个 shell。

相关内容