为什么我的 .bashrc 文件没有从 .profile 中读取

为什么我的 .bashrc 文件没有从 .profile 中读取

在我的.profile文件中我有这样一行:

# source bashrc if it exists
if [ -f ~/.bashrc ]; then
    source ~/.bashrc
fi

确保我的.bashrc文件存在(如果存在)。我还有一个在新机器上运行的设置脚本,用于设置由于某种原因而表现不同的环境。

在设置脚本的末尾我有:

# read .profile
source "$USERDIR/.profile"

其中$USERDIR指向我的主目录。我知道.profile当这个脚本执行时它的来源是正确的,因为我回显“.profile sourced”,并且在脚本完成时打印它。

但是,.bashrc不会从中读取.profile(当.profile源自此安装文件时)。我不明白为什么,因为只需输入source .profile即可bash正常工作。

我知道.bashrc它没有运行,因为我的 rc 文件中的 echo 行仅在我.profile直接获取而不是从此设置脚本中获取时才会回显。.bashrc当我尝试获取脚本时,该脚本确实存在(因此if [ -f ~/.bashrc ]应该执行),因为它是与 .profile 同时创建的。

答案1

一步一步来。将其添加到.profile

# source bashrc if it exists
if [ -f ~/.bashrc ]; then
    echo ".profile is sourcing " ~/.bashrc
    source ~/.bashrc
fi

然后调用 bash 作为登录:bash -l应该足够了。

.profile is sourcing /home/user/.bashrc是否打印了以下行: ?

如果是这样,问题可能出在:

  • 这些文件是否存在:~/.bash_profile、~/.bash_login
  • 是否使用该选项调用 bash --noprofile
  • 或使用您的设置脚本。

如果不是,则问题出在.profileand 或 上.bashrc

  • 也许您应该使用 $HOME 而不是 ~ 作为用户目录。
  • 也许你的 bashrc 有一行可以防止在非交互时执行:

    # If not running interactively, don't do anything
    [ -z "$PS1" ] && return
    

答案2

其中$USERDIR指向我的主目录。

到底指向哪里$HOME?在 bash 中,~总是扩展到任意$HOME点。如果source ~/.profile因为$HOME设置不正确而不能,那么您$USERDIR/.profile将无法source ~/.bashrc

相关内容