bash文档中提到:
login shell:
/etc/profile (当然它可能还调用其他外部脚本)
然后,~/.bash_profile,~/.bash_login,~/.profile,按这三个顺序查找到的第一个存在、可读文件
退出时:~/.bash_logout
交互shell:
~/.bashrc(--norc禁用,--rcfile指定其他文件)
非交互:
if [ -n "$BASH_ENV" ]; then "$BASH_ENV"; fi
但是不使用PATH变量搜索相应文件。
7个tty就是login shell,从实际情况看,图形界面的shell是先执行了login shell,然后执行的是交互shell。ssh登陆之后也是如此。
但是ssh中直接夹带命令比较特殊,看不出/etc/profile的痕迹,有的只是执行郭~/.bashrc的恒基,所以它的环境就只是~/.bashrc构建的环境。
参考:
http://stackoverflow.com/questions/216202/why-does-an-ssh-remote-command-get-fewer-environment-variables-then-when-run-man