LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3603|回复: 8

~/.bash_profile什么时候会生效?

[复制链接]
发表于 2008-4-6 05:10:43 | 显示全部楼层 |阅读模式
是该用户登录时就应该生效吧?
我把自己定义的一些环境变量写在~/.mybashrc里,然后在~/.bash_profile里添加导出此bashrc的环境变量,所以整体就是以下这样的(一个系统默认的,一个是自己定义的):

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

if [ -f ~/.mybashrc ]; then
        . ~/.mybashrc
fi

可是系统重启后, .mybashrc 里的变量并没有生效,打开终端后我必须用 $source .bash_profile, 然后变量值才被导出(也就是没有脚本的问题)

请问.bash_profile什么时候才被读取?不应该是登录时就会生效吗?

谢谢!
发表于 2008-4-6 10:22:34 | 显示全部楼层
login shell 会读取~/.bash_profile
non-login shell 它不读取 /etc/profile 或 .bash_profile 文件,而是读取 ~/.bashrc 文件
在 X 环境下所启动的终端机 (shell)是 non-login shell
回复 支持 反对

使用道具 举报

发表于 2008-4-6 18:47:35 | 显示全部楼层
有的终端机也可以选是否用 login shell 的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-7 00:44:09 | 显示全部楼层
Post by knut;1835278
login shell 会读取~/.bash_profile
non-login shell 它不读取 /etc/profile 或 .bash_profile 文件,而是读取 ~/.bashrc 文件
在 X 环境下所启动的终端机 (shell)是 non-login shell


多谢帮助。看了下文档,有一点不太明白,non-login shell不读取profile文件,但我在/etc/profile里的环境变量却是生效的(没有在其他的~/.bash_profile, /etc/bashrc, ~/.bashrc设置过)。
会不会是对root用户的,也就是/etc下的profile和rc文件都会读取?

谢谢!
回复 支持 反对

使用道具 举报

发表于 2008-4-7 08:20:43 | 显示全部楼层
不知道我这样回答对不对,如果那里错了请大家指正。
虽然在X环境下开启的终端多数都是non-login shell 不读取 /etc/profile 或~/.bash_profile 但子程序还是会继承父程序的环境变量的。除非明确不继承。
在LFS 的4.4章节中有:
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
用完全空的环境来取代当前的环境(除了继承 HOME, TERM, PS1 变量外)
回复 支持 反对

使用道具 举报

发表于 2008-11-12 21:52:53 | 显示全部楼层
Post by 晨想;1835462
有的终端机也可以选是否用 login shell 的。
能够给个例子么?
回复 支持 反对

使用道具 举报

发表于 2008-11-12 22:00:30 | 显示全部楼层
多谢帮助。看了下文档,有一点不太明白,non-login shell不读取profile文件,但我在/etc/profile里的环境变量却是生效的(没有在其他的~/.bash_profile, /etc/bashrc, ~/.bashrc设置过)。
会不会是对root用户的,也就是/etc下的profile和rc文件都会读取?
Post by knut;1835644
不知道我这样回答对不对,如果那里错了请大家指正。
虽然在X环境下开启的终端多数都是non-login shell 不读取 /etc/profile 或~/.bash_profile 但子程序还是会继承父程序的环境变量的。除非明确不继承。
在LFS 的4.4章节中有:
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
用完全空的环境来取代当前的环境(除了继承 HOME, TERM, PS1 变量外)

在X环境中,在打开终端之前,系统从哪个文件中来读取环境变量的设置的呢?X环境下肯定还是需要环境变量的,他是在哪个文件中设置的呢?
如果知道了X环境中环境变量来自哪个文件,那么在X环境下打开的终端肯定会继承那些已有的环境变量,在BLFS手册中有如下:
An interactive non-login shell is also started with a terminal program such as xterm or konsole from within a graphical environment. This type of shell invocation normally copies the parent environment and then reads the user's ~/.bashrc file for additional startup configuration instructions.   
回复 支持 反对

使用道具 举报

发表于 2008-11-16 14:31:25 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2008-11-16 18:20:48 | 显示全部楼层
cat .bashrc

source ~/.bash_profile

----------------------

以后只要修改 .bash_profile就好。同一一下。
这两个是不同的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表