哪些安装文件应用于通过bash设置环境变量?


9

正如我在此处此处所获得的答案一样,PATH变量具有不同的路径名,具体取决于应用程序的激活方式。

  • 无论我如何使用bash启动软件,应使用哪个设置文件(.bashrc,.profile,...)来具有相同的PATH变量?

Answers:


15

传统上,在Unix系统上定义每个用户环境变量的位置是~/.profile。如果登录外壳程序是与Bourne兼容的外壳程序,则登录外壳程序(即登录时启动的程序,可以在其中键入命令)读取该文件。

Bash是与Bourne兼容的外壳。当作为登录名调用它时,shell读取~/.bash_profile该文件是否存在,~/.profile如果~/.bash_profile不存在。

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

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

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

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

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


一些应用程序调用交互式非登录外壳程序,这意味着不会读取.profile和.bash_profile。如果您想为这些应用程序设置环境变量,一种方法是在.bashrc中设置它们,即使这不是应该的。见github.com/mobile-shell/mosh/issues/102#issuecomment-12503646
威廉·威廉(William)

.profile登录时将读取@William 。将环境变量放入将.bashrc不起作用,并且您的场景说明:运行此shell的(可能是GUI)应用程序应该具有您的环境变量,但是如果在中定义它们.bashrc,则不会。 t。
吉尔斯(Gilles)'所以

mosh不是GUI,它是ssh的替代方法。我并没有捍卫它的行为,只是试图帮助遇到我和其他人遇到的相同问题的其他人,正如我链接的Github问题中所述。
威廉

2

确切的答案是在Bash启动文件的bash手册页部分中。“启动不是登录shell的交互式shell时,Bash从〜/ .bashrc读取并执行命令(如果该文件存在的话)。”

回答您的其他问题,指出eshell实际上并未运行bash。Emacs eshell不是bash。假定eshell将加载.bashrc与假设zshcsh将加载相同的错误.bashrc。这是一个不同的外壳。

我看到两个选择:

  1. 创建您自己的脚本,该脚本使用目录列表,并为生成相应的bash代码bash和elisp代码eshell
  2. 设置您的ESHELL或SHELL环境变量,以便您实际上在emacs中运行 bash。我就是做这个的。Bash在emacs中工作正常。

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


1

在〜/ .profile中设置PATH应该就可以了。登录后,每个已知的POSIX兼容或类似Bourne的外壳(包括bash)都会读取该文件。如果对该文件进行更改,则必须注销然后重新登录,以使更改生效。由于PATH是登录过程环境的一部分,因此应将其导出到随后启动的每个Shell中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.