识别login shell与non-login shell
login shell
可能是以-
开头的
[almalinux@VM-AlmaLinux8-tmpl-wanlinwang ~]$ echo $0
-bash # "-" is the first character. Therefore, this is a login shell.
或者以--login
启动的bash
[almalinux@VM-AlmaLinux8-tmpl-wanlinwang ~]$ echo $0
bash
[almalinux@VM-AlmaLinux8-tmpl-wanlinwang ~]$ ps -p $$ -o cmd
CMD
bash --login
Non-login shell
[almalinux@VM-AlmaLinux8-tmpl-wanlinwang ~]$ echo $0
bash
[almalinux@VM-AlmaLinux8-tmpl-wanlinwang ~]$ ps -p $$ -o cmd
CMD
bash
login shell的初始化过程
根据bash手册(man bash),不管是interactive或是non-interactive的login shell,首先读取/etc/profile文件,然后按顺序开始查找~/.bash_prifile、~/.bash_login、~/.prifile文件,仅读取第一个找到的文件。
当它退出时,会读取~/.bash_logout与/etc/bash.bash_logout文件。
non-login shell初始化过程
根据bash手册(man bash),interfactive的non-login shell会读取~/.bashrc文件。如果指定了--rcfile <rcfile>
则读取rcfile,而不读取~/.bashrc文件。