交互式shell和非交互式shell、登录shell和非登录shell的区别

 

也算写过一些Bash脚本的人了,不过对与这几个概念,还不是很清楚,于是恶补了一下。
交互式shell和非交互式shell、登录shell和非登录shell的区别。
首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录。
交互式shell和非交互式shell
交互式模式就是shell等待你的输入, 并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。
shell也可以运行在另外一种模式:非交互式模式,以shell script(非交互)方式执行。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。

启动互交式的shell

  你可在一个shell中输入带路径的shell名启动另一个shell,退出用exit命令。这在修改了一个shell的设置后验证改变效果十分有用。

  启动非互交式的shell

  最经常的用法就是用一个shell执行脚本,例:/bin/sh filename filename是包含可执行命令的文件名。

  使shell脚本可执行

  如果你想仅仅输入名字就可执行脚本,你必须:

  1、把文件用chmod命令标识为可执行。例:chmod a+x filename

  2、使用适当的shell来执行。这必须确保脚本的第一行为:“#!shell名”。例:#!/bin/sh。如果把“#!/bin/sh”放在其它行,则会被当作注释忽略掉。shell把#至行尾的内容理解为注释。

 

chinaunix论坛中关于登录shell与非登录shell、交互式shell与非交互式Shell的讨论:
Login Shell:当init3时,mingetty spawn出登录提示符的时候,你输入帐号和密码进入了,出现了shell提示符,这个过程就是登录外壳;
Interactive Shell:接下来你得到了一个像
root@host />这样的提示符,你输入什么,它就解释出什么,这就是交互式外壳;你在当前Shell又fork了一个shell(bash),这个bash也是交互式外壳。通常情况下interactive shell是login shell派生出来的。
Non Interactive Shell:你可能需要学习写一个bash script,用外部shell执行:bash  script.sh,它(bash)从第一条命令执行到最后一条然后退出,不与你进行任何交互,它就是非交互式外壳。
交互式非登录shell就是指你在Gnome图形界面中打开“终端”出来的那种窗口程序,
和登录shell相比,它是“非登录”的,你并不需要输入用户名和密码,
和非交互式shell相比,这是“交互式”的,就像你说的那它:你输入什么,它就解释出什么

执行exit退出非登录shell状态;
执行logout退出登录shell状态。

在登录shell里,确实只读取/etc/profile和~/.bash_profile, ~/.bash_login, and ~/.profile按顺序最先的一个,并执行其中的命令。除非被 --noprofile选项禁止了;
在非登录shell里,确实只读取 /etc/bash.bashrc和~/.bashrc

参考资料:
http://www.learndiary.com/home/space-1-do-blog-id-3780.html
http://blog.csdn.net/jiankun_wang/archive/2009/07/02/4317407.aspx
http://xjwb.com.cn/onews.asp?id=261
http://linux.chinaunix.net/bbs/viewthread.php?tid=1044225

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值