为何bash或sh无法加载ENV文件(~/.bashenv)?
问题原因解析
1. ~/.bashenv不属于bash或sh的默认加载配置文件
bash和sh都有严格的默认配置文件命名规则,不会自动加载自定义命名的~/.bashenv:
- bash的加载逻辑:
- 登录shell优先加载
~/.bash_profile,不存在则依次尝试~/.bash_login、~/.profile - 非登录交互式shell加载
~/.bashrc - 非交互式shell(如脚本执行)默认不加载任何配置文件,仅当设置
BASH_ENV环境变量时才会加载指定文件
- 登录shell优先加载
- sh(包括bash兼容模式、dash等POSIX标准shell)的加载逻辑:
- 登录shell加载
~/.profile - 非登录交互式shell通常加载
~/.shrc(不同实现略有差异),但同样不会识别~/.bashenv
- 登录shell加载
2. 你的操作场景均未触发~/.bashenv的加载
- 启动sh子shell、非登录bash子shell:这类场景下shell只会读取各自默认的配置文件,完全不会访问
~/.bashenv - 切换为bash登录shell:此时bash仅加载
~/.bash_profile等登录类配置文件,除非你在~/.bash_profile中手动添加了source ~/.bashenv命令,否则不会自动加载这个自定义文件 - 切换为sh登录shell:sh登录模式仅加载
~/.profile,同样不会识别~/.bashenv
3. 让~/.bashenv被加载的方法
如果需要~/.bashenv在对应场景下被加载,可在相应的默认配置文件中添加加载命令:
- bash登录场景:在
~/.bash_profile中添加source ~/.bashenv - bash非登录交互场景:在
~/.bashrc中添加source ~/.bashenv - sh登录场景:在
~/.profile中添加source ~/.bashenv - sh非登录交互场景:在
~/.shrc中添加source ~/.bashenv
内容的提问来源于stack exchange,提问作者Minix Li
相关产品推荐
相关产品推荐

