关于.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里面是什么就好了.

好麻烦的... 你感兴趣的话自己做吧, 我就不演示了哈~

results matching ""

    No results matching ""