登录shell和交互式shell之间有什么区别?

时间:2013-08-12 12:25:04

标签: bash shell interactive-shell

什么是login shellinteractive shell,什么是.bash_profile.bashrc

2 个答案:

答案 0 :(得分:65)

  

交互式shell是在没有非选项参数的情况下启动的,   除非指定-s,否则不指定-c选项,并且其中   输入和错误输出都连接到终端(确定   by isatty(3)),或者以-i选项开头。

     

交互式shell通常会读取和写入用户的内容   终端

[gnu bash manual]

登录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(因此它们只需要定义一次)。