在不同的系统甚至不同的shell解释器上都有可能导致加载顺序问题
所以做了一个两边都能用的方案

# 在.bash_profile中添加
if [ -f /home/zen/.bashrc ]; then
    . /home/zen/.bashrc
fi
# 在.bashrc中添加
if [ -f /home/zen/.bash_profile ]; then
    . /home/zen/.bash_profile
fi
# 如何保证只被调用一次 避免造成循环引用的问题

实测不同终端模拟器会选择性调用.bashrc.bash_profile 为了保持一致性使用如下方法


为了避免在 .bash_profile.bashrc 之间造成循环引用的问题,可以使用一个环境变量来标记是否已经加载过其中一个文件。这样可以确保每个文件只被加载一次。以下是具体的实现方法:

.bash_profile

if [ -f /home/zen/.bashrc ] && [ -z "$BASHRC_LOADED" ]; then
    export BASHRC_LOADED=1
    . /home/zen/.bashrc
fi

.bashrc

if [ -f /home/zen/.bash_profile ] && [ -z "$BASH_PROFILE_LOADED" ]; then
    export BASH_PROFILE_LOADED=1
    . /home/zen/.bash_profile
fi

解释:

  • .bash_profile 中,首先检查 .bashrc 是否存在,并且检查环境变量 BASHRC_LOADED 是否未设置(即为空)。如果条件满足,则加载 .bashrc 并设置 BASHRC_LOADED 变量。
  • .bashrc 中,首先检查 .bash_profile 是否存在,并且检查环境变量 BASH_PROFILE_LOADED 是否未设置(即为空)。如果条件满足,则加载 .bash_profile 并设置 BASH_PROFILE_LOADED 变量。

结果:

  • 这样设置后,.bash_profile.bashrc 之间不会造成循环引用,因为一旦其中一个文件被加载,相关的环境变量就会被设置,后续的加载将被跳过。这样可以确保每个文件只被调用一次。