码迷,mamicode.com
首页 > 其他好文 > 详细

关于login/interactive/no-interactive shell和profile/bash_profile/bashrc

时间:2014-05-23 08:52:18      阅读:313      评论:0      收藏:0      [点我收藏+]

标签:style   class   c   code   color   a   

login shell:第一次登录进系统时的shell,一般是指本机启动时的控制台shell或者ssh远程登录时的shell。

interactive shell:登录以后,再打开控制台时运行的shell。

none interactive shell:只是用来执行脚本的shell,执行完就结束进程了,没有用户交互过程。

mac有个特殊地方:每次打开一个终端都是一个login shell。

检测当前shell是哪种的方法:

To check if you are in an interactive shell:

[[ $-==*i*]]&& echo ‘Interactive‘|| echo ‘Not interactive‘

To check if you are in a login shell:

shopt -q login_shell && echo ‘Login shell‘|| echo ‘Not login shell‘

 

有了这个区分,然后就有了对各种profile/rc文件的执行时机的准则:(通过man bash得知)

1、对于(必然为交互式的)login shell:首先执行 /etc/profile;然后在~/.bash_profile, ~/.bash_login, ~/.profile中查找第一个存在的执行。(对于非交互式shell如果带--login选项也对应此情况)

2、对于交互式非login shell:先后执行 /etc/bash.bashrc 和 ~/.bashrc,注意是都会执行,只要它们存在。(这种默认设置可以用--norc和--rcfile选项来改变)

3、对于非交互式shell:执行环境变量BASH_ENV对应的文件。

 

结合以上知识,一般的启动脚本配置是:环境变量定义放在.bash_profile里,其它代码放在.bashrc里,然后在.bash_profile里source .bashrc。

解释:

linux:首次登录执行.bash_profile,其内执行.bashrc,所有代码都运行到。以后每次打开终端虽然只执行.bashrc,但环境变量自动继承父进程的仍然可以得到。

mac:每次都是执行.bash_profile,其内执行.bashrc,所有代码都运行到。

 

关于login/interactive/no-interactive shell和profile/bash_profile/bashrc,布布扣,bubuko.com

关于login/interactive/no-interactive shell和profile/bash_profile/bashrc

标签:style   class   c   code   color   a   

原文地址:http://www.cnblogs.com/wellbye/p/3738024.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!