什么是login shell
和interactive shell
,什么是.bash_profile
和.bashrc
?
答案 0 :(得分:65)
交互式shell是在没有非选项参数的情况下启动的, 除非指定-s,否则不指定-c选项,并且其中 输入和错误输出都连接到终端(确定 by isatty(3)),或者以-i选项开头。
交互式shell通常会读取和写入用户的内容 终端
登录shell 是您登录的shell。您可以从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
交互式shell 是一个从标准输入读取命令的命令,通常是终端。
例如,如果您使用xterm或终端模拟器(如putty
)登录bash,则会话既是登录shell又是交互式shell。然后,如果您键入bash
,则输入交互式shell,但它不是登录shell。
如果运行shell脚本(包含shell命令的文件),那么它既不是登录shell也不是交互式shell。
启动文件在bash中具有高度可定制性:
当调用登录bash shell时,将获取/etc/profile
(在当前环境中执行)。之后,检查三个文件是否存在。这些文件的检查按以下顺序进行:
如果/etc/profile
存在,则源(运行)它
if ~/.bash_profile exists
,source(run)it
if ~/.bash_login exists
,source(run)it
if ~/.profile exists
,source(run)it
找到匹配后,其他文件将被忽略,即使它们存在。 /etc/bashrc
和~/.bash_profile
文件可能会使用~/.bashrc
文件。这意味着/etc/bashrc
文件来自bash的所有交互式调用,无论是登录还是非登录shell。
因此,每次请求新的交互式shell 时,也会运行.bashrc
文件。这不包括shell脚本。通常,变量,别名或函数都放在此文件中。
如果适当指示,Bash shell脚本会读取不同的文件。如果用户定义(通常在他们自己的.bash_profile
中)包含文件名的变量BASH_ENV
,脚本将读取此内容。如果未设置(并导出)此变量,则bash脚本将不会读取任何启动文件。
答案 1 :(得分:3)
由于您可能知道“shell”是什么并且正在使用它,因此您的问题仅针对登录shell和其他所有内容之间的差异 ...
登录shell仅与任何其他shell不同,因为启动时加载了一个或多个初始设置脚本(资源),通常在其名称中以“profile”命名。在那里定义了基本设置,这些设置被导出到随后打开的shell(因此它们只需要定义一次)。