~/.bashrc的故事

明明的一台机器,不自动运行.bashrc了,为啥呢?

查:

vim ~/.bashrc
~/.bashrc的故事
.bashrc的头注释说明bash 的non-login模式shell
~/.bashrc的故事
~/.bashrc的故事
man bash
说这个文件是用户的个性化设置文件,登录个人用户的时候执行,在/etc/bash.bashrc进行系统初始化,当为sh环境的时候默认关闭
 
至此,问题基本可以解决,改passwd用户的shell默认启动器即可。
 

闲着没事,再往下看看。

apt source bash
下载源码 vim shell.c
~/.bashrc的故事
bash 的实现程序上说明登录模式shell和sh不执行.bashrc,不过都会执行/etc/profile。
 

那它怎么运行的呢?

查:

以ubuntu 18.04为例:
ps -auxefww >> ps.txt
获取进程树
cat /etc/init.d/gdm3
apt source gdm
vim  ./daemon/gdm-session-worker.c
~/.bashrc的故事
gdm登录的时候遍历passwd_info信息,获取环境设置的配置内容,如果配置中有shell值则设置为指定shell,没有设置为bash
cat /etc/init.d/ssh
 
内核->init
init->/etc/init.d/gdm3      拉起/lib/systemd/systemd-logind服务
init->/bin/login -> bash   在用户登录的时候,启动bash子进程检测,根据检查结果,选择执行profile bashrc等脚本设置用户shell环境
  (bash INVOCATION_ID=fb37824179b44bc3a61c51f62fabd8d1
    TERM=linux
    JOURNAL_STREAM=9:46620 HOME=/root
    SHELL=/bin/bash
    USER=root LOGNAME=root
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
    LANG=en_US.UTF-8
    MAIL=/var/mail/root XDG_SESSION_ID=3
    XDG_RUNTIME_DIR=/run/user/0
    DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus
    XDG_SEAT=seat0 XDG_VTNR=1
    HUSHLOGIN=FALSE)
init->/etc/init.d/ssh ->bash       拉起/usr/sbin/sshd服务,ssh client连接成功之后