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

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

我正在设置从 IT 部门获得的新 Linux 机器,并注意到.profile当我启动新的终端会话时未加载。当前 shell 是猛击,尽管我改变了默认设置它附带了。如何让它.profile在启动时加载?

我通过以下方式访问 shellSSHssh myusername@remotemachine。我对它有管理员权限。

答案1

当 Bash 作为交互式登录 shell 启动时,它所启动的一个文件可能过程是~/.profile

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

您可以将以下内容添加到您的~/.bashrc(但要小心循环或值被无意中更改):

. $HOME/.profile

答案2

这有点取决于你如何启动 shell。正如其他人所说,登录 shell 将加载你的配置文件(它将首先查找 .bash_profile,然后尝试 .profile)。如果它找到其中一个,它将加载它们。非登录 shell(交互式或非交互式)将获取 .bashrc。

我建议将所有内容放入 .bashrc 中。.profile/.bashrc 的拆分有点随意,在 UNIX 的旧时代更有意义,那时 tty 不仅仅是一个设备名称,而是一个真正的 TeleType。它旨在在“主”登录到服务器时启动某些操作(如检查邮件),以及为其他 shell 执行常规设置。在大多数 Linux 中,您现在登录时,您实际上并不是登录到 shell,而是登录到某个图形界面(KDE、gnome、CDE“shudder”)。“生成登录进程”现在由您的会话管理器负责。现在它不再那么重要了。

我的建议:让你的 .profile 仅包含以下内容:

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

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

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

相关内容