交互式、非交互式,登录式、非登录式Shell

时间:2022-04-04 19:47:43

交互式Shell和非交互式Shell

  1. 交互式模式:在终端上执行,shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,shell也终止了。
  2. 非交互式模式:以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。
  3. 可以通过打印“$-”变量的值(代表着当前shell的选项标志),查看其中的“i”选项(表示interactive shell)来区分交互式与非交互式shell。

登录式Shell和非登录式Shell

  1. 登录shell:需要用户名、密码登录后才能进入的shell(或者通过--login”选项生成的shell)。
  2. 非登录shell:不需要输入用户名和密码即可打开的Shell,例如:直接命令“bash”就是打开一个新的非登录shell;在Gnome或KDE中打开一个“终端”(terminal)窗口程序也是一个非登录shell。
  3. 退出一个登录shell:exit或者logout;退出一个非登录shell:只能exit。

使用启动脚本,可以让自定义的环境一劳永逸。

这些脚本在shell被创建时运行根据shell是登录shell还是非登录shell,所运行的启动脚本也会不一样。

su - username是登录shell;su username是非登录shell(注意su - username中间有空格)。直接打开终端是非登录shell。

keegen@keegensCP:~$ su - keegen
密码: 
keegen@keegensCP:~$ echo $0
-su
keegen@keegensCP:~$ logout
keegen@keegensCP:~$ echo $0
bash

 /etc/profile 是登入shell启动后运行的第一个启动脚本,它只为登入shell运行;非登入shell不会引发这个脚本。

登入shell加载启动脚本的顺序为

/etc/profile → /etc/profile.d → ~/.bash_profile → ~/.bashrc → /etc/bashrc

 每个调用的脚本会依次撤销前一个调用脚本中的改变。

在退出登入shell时,我们还可以执行某些任务,如创建自动备份、清除临时文件。把这些任务放在.bash_logout文件中。

非登入shell加载启动脚本的顺序

~/.bashrc → /etc/bashrc → /etc/profile.d