看一篇debian的学习笔记里面说,.bash_profile是bash全局设置文件,而.bashrc是当一个bash shell调用另一个bash shell时候读取的设置。我在配置debian的时候,参照网上的一个做法,将/etc/.bash_profile里面内容复制到/root/.bashrc内,并将下列反注释掉
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
使root帐户具有table补全的能力。
那么,我的问题就在这里,我登录linux时候,直接登录的root帐户,并没有调用其他的shell阿,那么怎么需要将这些复制到.bashrc中,并反注释掉这些,才能具有补全作用?如果我直接将.bash_profile中的这几句反注释掉,是不是root帐户也具有了补全的能力了?我安装系统时候,新建了一个用户,这个用户并不需要这一步设置,就直接具有补全作用了,这个帐户下的.bashrc有上面的内容了。这是为什么?
达人,给我解释一下把,多谢
回帖1
1. 首先要分清login shell和non-login shell, login shell是用户登录的时候启动的带身份验证的shell, /etc/passwd中可以看到,username对应的shell name,常见的是bin/bash. 当login shell启动后,会读入两个文件,/etc/profile 和用户根目录下的.bash_profile(如果没有,会再执行~/.bash_login, ~/.profile).
2. shell还分交互式shell和非交互式shell, 显然login shell也是一种交互式的shell。对于non-login的交互式shell, 启动时会执行~/.bashrc,而~/.bashrc中又会去执行/etc/bashrc. 对于login shell,为了更一致一些所以会在~/.bash_profile中执行~/.bashrc,所以对.bashrc的修改能影响所有的交互式shell。
3. 新添加一个用户时,会添加一个记录到/etc/passwd,创建用户的home目录,将/etc/skel目录下的内容,拷贝到home目录下,skel中包含了用户home目录的基本文件和目录结构,包括.bashrc.(当然这些都是可以用户自定义的,如useradd -k -m 什么的)。
回帖2:
所以
1 .bashrc确实是为non-login 交互式shell准备的。login shell并不直接读取,但是在.bahs_profile中会执行。
2 对于login shell改bash_profile当然也可以。所以是修改.bash_profile还是.bashrc,要看具体的情况。
3 至于新建用户的问题,看看/etc/skel。
当然最有效的就是把.bash_profile改了,登录看看,往/etc/skel里添加几个文件,改改.bashrc,再创建一个新用户看看。鉴于linux的多样性,实践+理解才是王道。
guocuily 于 2009-11-30 18:23:10发表:
辛苦