登录 shell 和交互式 shell 的区别是什么?

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

36483 次浏览

因为您可能知道什么是“ shell”,并且正在使用它,所以您的问题只针对登录 shell 和其他所有内容之间的 不同..。

登录 shell 与其他 shell 的区别仅在于一个或多个初始设置脚本(资源)在启动时加载,通常在名称中使用“ profile”命名。其中定义了一些基本设置,这些设置派生为随后打开的 shell (因此它们只需要定义一次)。

交互式 shell 是没有非选项参数的开始, 除非指定了-s,但没有指定-c 选项,并且其 输入和错误输出都连接到终端 通过 isatty (3) ,或者以-i 选项开始。

交互式 shell 通常读取和写入用户的 晚期。

[ Nu bash 手册]

A 登录 shell is a shell where you login. You can recognize a login shell from a ps -f listing, it will have a hyphen at the start of the program name, for example:

root      3561  3553  0 09:38 pts/0    00:00:00 -bash
qa        7327  3432  0 10:46 pts/1    00:00:00 -bash

交互式外壳是从标准输入(通常是终端)读取命令的程序。

例如,如果你使用 xterm 或者像 putty这样的虚拟终端登录 bash,那么这个会话就是一个登录 shell 和一个交互式 shell。如果然后键入 bash,那么您将输入一个交互式 shell,但它不是登录 shell。

如果运行 shell 脚本(包含 shell 命令的文件) ,那么它既不是登录 shell,也不是交互式 shell。

在 bash 中,启动文件 是高度可裁剪的:

当调用登录 bash shell 时,将来源 /etc/profile(在当前环境中执行)。然后,检查三个文件是否存在。对这些文件的检查按以下顺序进行:

如果 /etc/profile存在,则源代码(运行)它
如果 ~/.bash_profile存在,则源代码(运行)它
如果 ~/.bash_login存在,则源代码(运行)它
如果存在 ~/.profile,则源(运行)它 < br >

一旦找到匹配,其他文件将被忽略,即使它们存在。/etc/bashrc文件可以同时被 ~/.bash_profile~/.bashrc文件使用。这意味着 /etc/bashrc文件来源于 bash 的所有交互式调用,无论它是登录还是非登录 shell。

因此,每次请求新的 交互式外壳时,也会运行 .bashrc文件。这不包括 shell 脚本。通常,变量、别名或函数都放在这个文件中。

如果指导得当,Bash shell 脚本可以读取不同的文件。如果用户定义了一个包含文件名的变量 BASH_ENV(通常在他们自己的 .bash_profile中) ,脚本将读取该变量。如果未设置(并导出)此变量,则 bash 脚本将不会读取任何启动文件。