Bash在Linux的新会话中未加载“ .profile”


22

我正在安装从IT部门获得的新Linux机器,并且.profile在开始新的终端会话时注意到未加载。当前的shell是Bash,尽管我从它附带的默认sh更改了它。如何.profile在启动时加载?

我通过SSH访问shell :ssh myusername@remotemachine。我对此具有管理员权限。


向我们显示您用于启动Shell的命令。
Nifle

Answers:


24

当Bash作为交互式登录shell启动时,它可能处理的文件之一是~/.profile

当它作为交互式非登录外壳启动时,它不会。它会处理/etc/bash.bashrc(如果您的Bash版本中启用了该文件或类似文件)和 ~/.bashrc

您可以向其中添加以下内容~/.bashrc(但请注意循环或值被无意更改):

. $HOME/.profile

8
如果您打算将.bashrc源用作您的.profile文件(我不建议这样做),则应注意避免双重来源。设置一些后卫变量左右 [ -z "$SOME_VAR_SET_IN_PROFILE" ] && . ~/.profile
富Homolka

2
是的,我也不推荐这么做。
暂停,直到另行通知。

12
登录shell将按顺序尝试〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并且仅打开找到的第一个。
比诺

3
正如其他人所说,不建议这样做,因为通常的方式是让个人资料和“朋友”(.bash_profile)来获取.bashrc,而不是其他方式。可能您的终端程序不是登录外壳,而是交互式非登录外壳。通常,您可以设置一个首选项-将其设置为登录shell以使.profile,.login和/或.bash_profile得以执行。
罗尔姆斯

15

这取决于您如何启动外壳。就像其他人所说的那样,登录shell将加载您的配置文件(它将首先查找.bash_profile,然后尝试.profile)。如果找到其中之一,则会加载它们。非登录外壳程序(交互式或非交互式)将源.bashrc。

我建议将所有内容都放入.bashrc中。.profile / .bashrc拆分是任意的,在UNIX的早期(tty不仅仅是设备名称,而是实际的TeleType)更有意义。它旨在在“主”登录服务器时启动某些操作(例如检查邮件),而对于其他Shell则只是常规设置。在大多数Linux中,您现在要登录,而实际上是登录某些图形界面(KDE,gnome,CDE'shudder')时,您实际上并没有登录到Shell。现在,您的会话管理器会处理“ spawn登录过程”。现在已经不那么重要了。

我的建议:让您的.profile仅包含:

[ -f $HOME/.bashrc ] && . $HOME/.bashrc

作为.bashrc的第一行,通过提早跳出来运行bash脚本时,防止发生奇怪的事情:

[[ $- != *i* ]] && return

5
.profile应保持bash不可知论。我建议要配置.bash_profile负载.profile,然后负载.bashrc。仅将与bash无关的内容放入.profilePATH和中LC_*。把其余的放进去.bashrc
lesmana 2011年

@Rich Homolka为什么您的命令中两次[-f $ HOME / .bashrc]?您发布的命令与'相比有何不同。$ HOME / .bashrc'吗?
大卫·多里亚

1
提示:请勿在您的.bashrc中放入任何写入stdout或stderr的内容,因为这可能会破坏诸如SCP之类的非交互式客户端。带有输出的内容(例如,我很喜欢幸运饼和正常运行时间)仅应放在.profile / .bash_profile中
Brian A. Henning

@Lotharyx是的。我们有一个标准的kshrc,可以导出到stdout,爆发了Xserver(超过了蜂鸟)
Rich Homolka
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.