在不同的系统甚至不同的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
之间不会造成循环引用,因为一旦其中一个文件被加载,相关的环境变量就会被设置,后续的加载将被跳过。这样可以确保每个文件只被调用一次。