登录与非登录shell的:
区分:是否需要输入用户名密码。
转换:
非登录可以转换成登录 使用--login
考虑转换情况,相对科学的区分:既不使用密码,也不使用--login转换的是非登录,其他都是登录。
登录与非登录运行shell的区别:
对于Bash来说,登录shell会首先读取和执行/etc/profile全局配置文件中的命令,然后依次查找~/.bash_profile、~/.bash_login 和 ~/.profile这三个配置文件,读取和执行这三个中的第一个存在且可读的文件中命令。除非被“–noprofile”选项禁止了。
在非登录shell里,只读取 ~/.bashrc (和 /etc/bash.bashrc、/etc/bashrc )文件,不同的发行版里面可能有所不同。
交互式与非交互式shell:
区分:是否与用户进行交互(在终端上执行,shell等待你的输入,并且立即执行你提交的命令。)
交互式与非交互式shell运行时的区别:
交互式shell下打开进程时,会启用工作控制job control(会影响到其子进程进程组的编号,作业控制模式下被shell打开的进程,进程组号为进程号),否则不会启用(其打开的进程组号继承父进程的进程组,既运行脚本的非交互式shell进程)。这是linux在作业控制中的设计,我准备另起文章探讨。在shell脚本中,使用set -m可以改变脚本的运行模式开启工作控制。
是否登录与是否交互是两个维度的概念,两两组合的四种情况均会出现:
1、登录交互式 最常见的登录系统后进行操作使用的shell。
2、非登录非交互式 常见的shell脚本的运行方式。
3、非登录交互式 在shell中使用bash调出shell、在系统中打开命令行工具等。
4、登录非交互式 强制使用登录方式打开的shell脚本。可以改变脚本访问的全局文件,在不少情况下也需要使用(远程使用非登录shell调用脚本但需要登录的全局环境时适用)。