当使用 windows 版的 git 时,默认 home 目录是没有 .bashrc 文件的。当我们手动创建一个 .bashrc 文件时,新开的 shell 环境系统会提示:
WARNING: Found ~/.bashrc but no
~/.bash_profile,
~/.bash_login or
~/.profile.
This looks like an incorrect setup.
A ~/.bash_profile that loads ~/.bashrc will be created for you.
这是新版本的 win git 升级后的功能,老版本 win git 不会提示你缺文件。这会导致你创建了 .bashrc 文件,但 shell 不会自动加载。
新增加的自动补全 ~/.bash_profile 配置文件的功能,实际上遵守了 shell 的配置文件加载顺序。
精简版的 win git 自带的 shell 会先加载 ~/.bash_profile,然后由 ~/.bash_profile 分别加载 ~/.profile 和 ~/.bashrc 。
其中 ~/.bash_login 和 ~/.profile,windows 版的 git 不会自动创建,如果缺文件就不加载。实际上只有 .bash_profile 和 .bashrc 两个文件是必须的。
不同发行版的入口 shell 配置文件稍有不同。其中 win 版 git 自带的 shell 使用的是 CentOS/RHEL 的模式:
默认使用 .bash_profile 作为入口,然后手动加载 .bashrc
默认使用 ~/.profile 作为入口,然后手动加载 .bashrc
原生 linux 系统的 shell 加载过程如下:
** Shell 配置文件加载顺序**
登录 Shell 的初始化流程
-
-
-
/etc/profile.d/*.sh
→ 加载所有 .sh
脚本。
-
用户级配置(按优先级顺序,仅加载第一个存在的文件)
-
~/.bash_profile
→ 优先执行(如果存在)。
-
-
~/.profile
→ 最后(如果前两者不存在)。
-
以上是“登录shell”的加载过程。除了交互式 shell 还有非交互式 shell 和 “非登录shell”。
一般通过远程终端(比如 ssh)访问 shell,这时使用的是“登录shell”的初始化流程(需要密码)。而已经进入到系统里面了,使用虚拟终端工具打开shell,此时不需要登录(不需要密码)。这时使用的是“非登录shell”初始化流程。
“非登录shell”初始化流程比较简单,它仅读取 ~/.bashrc 。因为它的父进程已经完成了“登录shell”的初始化流程,所以它只会读取~/.bashrc中的别名和函数。
最后一类是非交互式 Shell (Non-Interactive Shell),比如使用 bash ./script.sh 调用脚本。它仅读取$BASH_ENV环境变量指向的文件(默认不加载任何配置文件)。这里讨论的都是 bash 程序的行为,许多都是系统预装的,它的初始化流程实际上是写死在bash程序的代码里的,
原文始发于微信公众号(生有可恋):shell配置文件的加载顺序
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
点赞
https://cn-sec.com/archives/3925376.html
复制链接
复制链接
-
左青龙
- 微信扫一扫
-
-
右白虎
- 微信扫一扫
-
评论