事情的起因是昨天同事问了我一下 bash 的这两个初始化文件有啥区别,然后我突然发现用了那么久的 shell 确实从来没考虑过这个问题。似乎我一直以来,不管是 Linux 还是 Mac 都是使用 .bashrc
来进行 bash 的配置的。
既然有问题,那么就去查查资料呗。顺便做个笔记。
第一个想法就是去看看 man bash
是怎么说的,考虑到 Mac 的一些东西可能比较特殊,所以先远程了一台 Linux 来看看。因为我接触的比较多的还是 ~ 目录下的个人配置,所以全局部分的我就跳过了,区别就是一个作用域在全局,一个在局部。
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
嗯,.bash_profile
这个比较好懂,就是说每次你 login shell 的时候会执行的一个初始化文件。那么 .bashrc
这个 startup 是个啥玩意。
于是我做了个试验,我新建了一个用户,并且在 .bash_profile
和 .bashrc
里面都打了 log ,结果就是当你用 login 命令去登录新用户的时候,走的是 .bash_profile
而不是用 login 命令打开 bash 的时候走的则是 .bashrc
。但是有个情况比较有趣,当你的目录下没有 .bash_profile
的时候,直接用 login 登录也会走 .bashrc
。这个和 bash 的文档里说的似乎有所不同,后来去查了查文档,发现对于 .bashrc
的处理方式还和发行版的默认的一些东西有关系。不过一般建议就是如果要用 .bash_profile
记得在最后调用下 .bashrc
如下代码:
[[ -r ~/.bashrc ]] && . ~/.bashrc
另外,推荐用 zsh 就没那么多事情了。zsh 是会每次执行 .zshrc 的。
网友评论