什么是 login shell和 interactive shell,什么是 .bash_profile和 .bashrc?
login shell
interactive shell
.bash_profile
.bashrc
因为您可能知道什么是“ shell”,并且正在使用它,所以您的问题只针对登录 shell 和其他所有内容之间的 不同..。
登录 shell 与其他 shell 的区别仅在于一个或多个初始设置脚本(资源)在启动时加载,通常在名称中使用“ profile”命名。其中定义了一些基本设置,这些设置派生为随后打开的 shell (因此它们只需要定义一次)。
交互式 shell 是没有非选项参数的开始, 除非指定了-s,但没有指定-c 选项,并且其 输入和错误输出都连接到终端 通过 isatty (3) ,或者以-i 选项开始。 交互式 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:
ps -f
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。
putty
bash
如果运行 shell 脚本(包含 shell 命令的文件) ,那么它既不是登录 shell,也不是交互式 shell。
在 bash 中,启动文件 是高度可裁剪的:
当调用登录 bash shell 时,将来源 /etc/profile(在当前环境中执行)。然后,检查三个文件是否存在。对这些文件的检查按以下顺序进行:
/etc/profile
如果 /etc/profile存在,则源代码(运行)它 如果 ~/.bash_profile存在,则源代码(运行)它 如果 ~/.bash_login存在,则源代码(运行)它 如果存在 ~/.profile,则源(运行)它 < br >
~/.bash_profile
~/.bash_login
~/.profile
一旦找到匹配,其他文件将被忽略,即使它们存在。/etc/bashrc文件可以同时被 ~/.bash_profile和 ~/.bashrc文件使用。这意味着 /etc/bashrc文件来源于 bash 的所有交互式调用,无论它是登录还是非登录 shell。
/etc/bashrc
~/.bashrc
因此,每次请求新的 交互式外壳时,也会运行 .bashrc文件。这不包括 shell 脚本。通常,变量、别名或函数都放在这个文件中。
如果指导得当,Bash shell 脚本可以读取不同的文件。如果用户定义了一个包含文件名的变量 BASH_ENV(通常在他们自己的 .bash_profile中) ,脚本将读取该变量。如果未设置(并导出)此变量,则 bash 脚本将不会读取任何启动文件。
BASH_ENV