我不知道该如何表述才能清楚。我不是在谈论终端或 shell,我知道登录和非登录 shell 之间的区别。我想知道的是当我启动计算机并登录到桌面时,我的主文件夹中的任何“点文件”(.profile
、.bash_profile
、.bashrc
等)都会运行吗?如果会,会运行哪些文件?
我之所以问这个问题,是因为默认情况下,您打开的大多数终端应用程序都不使用登录 shell,但我读过建议不要修改文件中的环境变量之类的内容.bashrc
,而是将其放入 中.bash_profile
,但如果我主要使用非登录 shell,我该如何设置这些内容?或者这个建议可能是针对那些通过 SSH 进入工作站的人?
我显然知道如何解决这些问题,我更多地是在解释为什么我对此感到好奇,而不是描述我遇到的问题。
答案1
事实上,这是一个很好的问题Unix 和 Linux因为它不仅与 Ubuntu 相关。
SuperUser 上有一个非常好的答案,描述了.bashrc
和.bash_profile
之间的区别.profile
。接受的答案很好地解释了这一点。以下是该答案的一些相关部分:
Bash 是一个类似 Bourne 的 shell。当它作为登录 shell 被调用时,它会读取命令 ,
~/.bash_profile
如果该文件不存在¹,它会尝试读取~/.profile
。... 如果 shell 不是登录 shell,它不会读取。当你将 bash 作为交互式 shell 启动时(即不运行脚本),它会读取~/.profile
~/.bashrc
还有一些有关使用 X 登录的信息:
在现代 Unices 上,与 相关的复杂性又增加了
~/.profile
。如果您在图形环境中登录(即,如果您输入密码的程序在图形模式下运行),则不会自动获得读取 的登录 shell~/.profile
。根据图形登录程序、您随后运行的窗口管理器或桌面环境以及您的发行版如何配置这些程序,您的~/.profile
可能会或可能不会被读取。
因此,如果我正确理解了您的问题,那么您是在问如果以图形模式登录(使用 lightdm,在这种情况下,您的登录屏幕可能是 Unity Greeter),会加载什么文件。在这里,我很确定在这种情况下是.profile
。接受的答案来自这个问题还告诉我们:
显示管理器(您输入用户名和密码的程序)和桌面环境的大多数组合都会
~/.profile
从登录脚本中读取