关于.bash_*的执行顺序
这一篇介绍了下面这些文件的执行顺序:
/etc/profile
~/.bash_profile
~/.bashrc
~/.bash_login
~/.profile
~/.bash_logout
交互式shell的执行顺序
execute /etc/profile
IF ~/.bash_profile exists THEN
execute ~/.bash_profile
ELSE
IF ~/.bash_login exist THEN
execute ~/.bash_login
ELSE
IF ~/.profile exist THEN
execute ~/.profile
END IF
END IF
END IF
登出时:
IF ~/.bash_logout exists THEN
execute ~/.bash_logout
END IF
需要注意的是/etc/bashrc
是由~/.bashrc
执行的:
# cat ~/.bashrc
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
non-login shell的顺序
科普 nologin shell
当我们需要一个不允许登陆但是允许使用系统资源的用户时,就用到了nologin shell(
/usr/sbin/nologin
), 比如在/etc/passwd
中的各种系统账户,当登陆的shell为nologin shell 时,会提示你此账户不允许登陆,而/bin/false
则是连登陆都不让登陆,只会返回False。 具体请看 :whats-the-difference-between-sbin-nologin-and-bin-false
IF ~/.bashrc exists THEN
execute ~/.bashrc
END IF
测试.
作者在这里做了个小测试, 就是在不同的文件下写了一个PS1
, 看看哪个被覆盖, 其实这样做很啰嗦的, 不如在每个文件下输出一点特殊的东西, 输出什么呢? 就输出自己的文件名, 在~/.bashrc
里面就加一句"echo .bashrc >> ~/order
", 在~/.bash_login
里面就加一句"echo bash_login >> ~/order
", 以此类推, 最后只要看看~/order
里面是什么就好了.
好麻烦的… 你感兴趣的话自己做吧, 我就不演示了哈~