什么是登录shell
和交互式shell
,以及.bash_profile
和 .bashrc
有什么区别?
什么是登录shell
和交互式shell
,以及.bash_profile
和 .bashrc
有什么区别?
ps -f
命令的输出来识别登录shell,它的程序名称开头会有一个连字符,例如:root 3561 3553 0 09:38 pts/0 00:00:00 -bash
qa 7327 3432 0 10:46 pts/1 00:00:00 -bash
/etc/profile
~/.bash_profile
~/.bash_login
~/.profile
/etc/bashrc
文件可能被 ~/.bash_profile
和 ~/.bashrc
文件同时使用。这意味着无论是登录还是非登录shell,/etc/bashrc
文件都会在所有交互式的bash调用中被引用。.bashrc
文件也会运行。这不包括shell脚本。通常,变量、别名或函数会放置在这个文件中。BASH_ENV
(通常在他们自己的.bash_profile
中),脚本将读取该文件。如果未设置(并导出)此变量,则bash脚本将不会读取任何启动文件。--login
(或-l
)选项启动非交互式bash进程。例如,当从crond
运行时,您可能希望执行所有启动文件。但是,一些脚本错误地假定登录等同于交互式。 - cdarke/etc/profile
将首先被调用,但应强调按顺序查找~/.bash_profile
、~/.bash_login
和~/.profile
,如果找到其中一个,则忽略以下文件(答案部分正确)。我已经验证过了(我在/etc/profile
中定义了JAVA_HOME
,在~/.bash_profile
中定义了BASH_PROFILE_SOURED
,在~/.bash_login
中定义了BASH_LOGIN_SOURCED
,在~/.profile
中定义了BASH_DEFAULT_PROFILE_SOURCED
。在新的登录shell中,只有JAVA_HOME
和BASH_PROFILE_SOURED
被定义)。 - Gary Wang由于您很可能知道什么是“shell”并且正在使用它,因此您的问题只针对登录shell和其他shell之间的区别...
登录shell仅因一个或多个初始设置脚本(资源)在启动时加载而与任何其他shell不同,通常以“profile”命名。 在那里定义了基本设置,这些设置派生给随后打开的shell(因此它们只需要定义一次)。