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