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

sa1*_*125 25 terminal bash shell bashrc .bash-profile

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

我通过访问外壳SSHssh myusername@remotemachine。我有管理员权限。

Den*_*son 24

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

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

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

. $HOME/.profile
Run Code Online (Sandbox Code Playgroud)

  • 登录 shell 将依次尝试 ~/.bash_profile、~/.bash_login 和 ~/.profile 并且只打开它找到的第一个。 (14认同)
  • 如果您打算将 .bashrc 源用作 .profile(我不推荐这样做),那么您应该对双重采购有所防范。设置一些保护变量左右 `[ -z "$SOME_VAR_SET_IN_PROFILE" ] && 。~/.profile` (8认同)
  • 正如其他人所说,这是不推荐的,因为通常的方法是通过配置文件和“朋友”(.bash_profile)来获取 .bashrc,而不是其他方式。可能是您的终端程序不是登录 shell,而是交互式非登录 shell。通常,您可以设置一个首选项——使其成为一个登录 shell,以获取 .profile、.login 和/或 .bash_profile 来执行。 (3认同)
  • 是的,我也不是很推荐。 (2认同)

Ric*_*lka 17

这有点取决于你如何启动你的 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
Run Code Online (Sandbox Code Playgroud)

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

[[ $- != *i* ]] && return
Run Code Online (Sandbox Code Playgroud)

  • `.profile` 应该保持与 bash 无关。我建议配置`.bash_profile` 来加载`.profile`,然后加载`.bashrc`。在 `.profile` 中只放入 bash 不可知的东西,比如 `PATH` 和 `LC_*` 的东西。把剩下的放在 `.bashrc` 中。 (6认同)