/etc/profile ~/.bash_profile ~/.bashrc /etc/bashrc文件调用顺序解析
2015-06-23 18:55
225 查看
问题:
今天在安装pyenv的时候碰到了这么个问题:
WARNING: seems you still have not added 'pyenv' to the load path.
# Load pyenv automatically by adding
# the following to ~/.bash_profile:
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
大概意思就是说,pyenv这个二进制还没有加入加载路径,从它给出的补救方法可以看出,我们要对PATH进行适当的修改,并且运行后面两个eval里面的命令
于是按照所说的去做,并不其作用。
谷歌了一下~/.bash_profile这个文件,发现了网上有一些关于如题所示四个文件的调用顺序,然后发现这些文章讲的并不是很清晰:有个问题会在login shell调用,有的会在新建bash shell时调用,有的又会在某种情况下调用。因为对这些东西没有清晰的概念(虽然有一定的了解),所以想做个实验证明下他们的调用顺序问题。
他们的调用顺序应是如下面所是:
/etc/profile->~/.bash_profile->~/.bashrc->/etc/bashrc
(这里面后两个箭头是在判断该文件存在了才会去调用)、
1,首先我在四个文件当中分别插入“echo 文件名”这样的语句,其中文件名分别对应着四个文件的完整路径。在terminal中输入bash,输出/home/laozhikun/.bashrc和/etc/bashrc,其他两个文件没有被调用。
问题:/etc/profile和~/.bash_profile什么时候被调用?
2,查找资料,发现对/etc/profile文件的修改只有在系统重启后才会生效,于是重启动
3,重启动后,重新打开terminal,仍然只输出/home/laozhikun/.bashrc和/etc/bashrc。查找资料,发现/etc/profile面对的是全局,很有可能它的输出不是在某个tty里面输出。于是在/etc/profile里面加上一句“touch /tmp/aaaa”
4,重新启动,立即在命令行打开/tmp,可见aaaa,记录修改时间,等两分钟,再重新启动,再次查找/tmp/aaaa,可见aaaa修改时间改变。过两分钟再次打开terminal,可见aaaa时间戳未改变,可知/etc/profile的调用是在开机的时候调用的
5,受/etc/profile文件启发,对~/.bash_profile进行了相似的修改->加上"touch /tmp/bbbb",并且重启
6,可见/tmp出现bbbb文件,记录时间戳,等两分钟,再次重启动,可见bbbb时间戳改变,过两分钟打开terminal,可见bbbb时间戳为改变,可见~/.bash_profile的调用是在开机的时候调用的
7,那么/etc/profile和~/.bash_profile的调用顺序是什么,通过man ls得到ls的一个参数--full-time,它能够准确现实文件被touch的时间戳。重启电脑,通过观察aaaa和bbbb的精确时间戳,可以发现aaaa的touch时间比bbbb的touch时间早,所以/etc/profile文件应比~/.bash_profile调用顺序要早
8,受此启发,对~/.bashrc和/etc/bashrc分别进行了添加“touch cccc”和添加“touch dddd”的修改,并且重新启动
9,开机之后不使用terminal查看时间戳,因为开启shell会调用~/.bashrc和etc/bashrc,我们使用Fedora自带的文件管理其进行查看,并且将文件排序方式设定为按照修改时间排序,可见修改时间为aaaa<bbbb<cccc<dddd,可见调用顺序为/etc/profile->~/.bash_profile->~/.bashrc->/etc/bashrc
10,启动shell(terminal),可cccc和dddd在文件管理器中的顺序被移到了最后,而另外一个本来在cccc和dddd之后的临时文件被挤到了倒数第三,此时cccc<dddd,可见打开terminal只调用~/.bashrc和/etc/bashrc,并且调用顺序为~/.bashrc->/etc/bashrc
11,踪上,调用顺序为/etc/profile->~/.bash_profile->~/.bashrc->/etc/bashrc,其中前两个只在登陆系统调用,后面两个在登陆系统和打开新的shell的时候都调用
12,画图如下:
13,回归到遇到的问题,pyenv给出的补救方法必须在重启后才能生效,如果想不重启而生效,可以在~/.bashrc里面添加那段补救命令,然后运行bash,而不是加在~/.bash_profile中
今天在安装pyenv的时候碰到了这么个问题:
WARNING: seems you still have not added 'pyenv' to the load path.
# Load pyenv automatically by adding
# the following to ~/.bash_profile:
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
大概意思就是说,pyenv这个二进制还没有加入加载路径,从它给出的补救方法可以看出,我们要对PATH进行适当的修改,并且运行后面两个eval里面的命令
于是按照所说的去做,并不其作用。
谷歌了一下~/.bash_profile这个文件,发现了网上有一些关于如题所示四个文件的调用顺序,然后发现这些文章讲的并不是很清晰:有个问题会在login shell调用,有的会在新建bash shell时调用,有的又会在某种情况下调用。因为对这些东西没有清晰的概念(虽然有一定的了解),所以想做个实验证明下他们的调用顺序问题。
他们的调用顺序应是如下面所是:
/etc/profile->~/.bash_profile->~/.bashrc->/etc/bashrc
(这里面后两个箭头是在判断该文件存在了才会去调用)、
1,首先我在四个文件当中分别插入“echo 文件名”这样的语句,其中文件名分别对应着四个文件的完整路径。在terminal中输入bash,输出/home/laozhikun/.bashrc和/etc/bashrc,其他两个文件没有被调用。
问题:/etc/profile和~/.bash_profile什么时候被调用?
2,查找资料,发现对/etc/profile文件的修改只有在系统重启后才会生效,于是重启动
3,重启动后,重新打开terminal,仍然只输出/home/laozhikun/.bashrc和/etc/bashrc。查找资料,发现/etc/profile面对的是全局,很有可能它的输出不是在某个tty里面输出。于是在/etc/profile里面加上一句“touch /tmp/aaaa”
4,重新启动,立即在命令行打开/tmp,可见aaaa,记录修改时间,等两分钟,再重新启动,再次查找/tmp/aaaa,可见aaaa修改时间改变。过两分钟再次打开terminal,可见aaaa时间戳未改变,可知/etc/profile的调用是在开机的时候调用的
5,受/etc/profile文件启发,对~/.bash_profile进行了相似的修改->加上"touch /tmp/bbbb",并且重启
6,可见/tmp出现bbbb文件,记录时间戳,等两分钟,再次重启动,可见bbbb时间戳改变,过两分钟打开terminal,可见bbbb时间戳为改变,可见~/.bash_profile的调用是在开机的时候调用的
7,那么/etc/profile和~/.bash_profile的调用顺序是什么,通过man ls得到ls的一个参数--full-time,它能够准确现实文件被touch的时间戳。重启电脑,通过观察aaaa和bbbb的精确时间戳,可以发现aaaa的touch时间比bbbb的touch时间早,所以/etc/profile文件应比~/.bash_profile调用顺序要早
8,受此启发,对~/.bashrc和/etc/bashrc分别进行了添加“touch cccc”和添加“touch dddd”的修改,并且重新启动
9,开机之后不使用terminal查看时间戳,因为开启shell会调用~/.bashrc和etc/bashrc,我们使用Fedora自带的文件管理其进行查看,并且将文件排序方式设定为按照修改时间排序,可见修改时间为aaaa<bbbb<cccc<dddd,可见调用顺序为/etc/profile->~/.bash_profile->~/.bashrc->/etc/bashrc
10,启动shell(terminal),可cccc和dddd在文件管理器中的顺序被移到了最后,而另外一个本来在cccc和dddd之后的临时文件被挤到了倒数第三,此时cccc<dddd,可见打开terminal只调用~/.bashrc和/etc/bashrc,并且调用顺序为~/.bashrc->/etc/bashrc
11,踪上,调用顺序为/etc/profile->~/.bash_profile->~/.bashrc->/etc/bashrc,其中前两个只在登陆系统调用,后面两个在登陆系统和打开新的shell的时候都调用
12,画图如下:
13,回归到遇到的问题,pyenv给出的补救方法必须在重启后才能生效,如果想不重启而生效,可以在~/.bashrc里面添加那段补救命令,然后运行bash,而不是加在~/.bash_profile中
相关文章推荐
- wdcp的环境搭建shell脚本分析--lanmp.sh---lib/common.sh
- 我的bashrc,留而利值(不定期更新)
- linux 常用shell
- bash: ./configure: /bin/sh^M: 坏的解释器: 没有那个文件或目录
- wdcp的环境搭建shell脚本分析--lanmp.sh---lib/common.conf
- 浅谈获取shell中函数的返回值
- bash下的特殊符号与通配符
- linux 通过shell操作串口
- Linux shell dialog详解
- linux下shell脚本编程2
- linux下shell脚本编程2
- shell学习二十四天----提取开头或结尾数行
- shell基本
- Python下调用Linux的Shell命令
- wdcp的环境搭建shell脚本分析--install.sh
- zorka源码解读之通过beanshell进行插桩的流程
- zorka源码解读之Beanshell与zorka的交互实现
- Mac OS X10.9.5bash基本命令失效后的修复
- 一个发送电子邮件的bash脚本
- JAVA执行bat文件和shell脚本文件