bash参考手册之六(Bash特性)续二

6.3 交互式shell

* 什么是交互式shell? 什么决定了一个shel是交互式的。

* 是交互式shell么? 怎么判断一个shell是交互式的。

* 交互式shell行为 交互式shell有什么不同?

6.3.1 何为交互式shell?

交互式shell是启动时除了 -s 之外,没有非选项参数,不指定 -c 选项,并且输入和错误输出都连接到终端(由isatty(3)确定),或者以 -i 选项启动的shell。

交互式shell一般从用户终端读取和写出内容到用户终端。

当启动交互式shell时,-s 选项一般用于设置位置参数。

6.3.2 是交互式shell么?

为了在脚本中确定Bash是否运行在交互模式,要测试特殊参数 ‘-’ 的值。当shell是交互式的时候,它的值包含i。例如:

case "$-" in
*i*) echo This shell is interactive ;;
*)   echo This shell is not interactive ;;
esac

或者,启动脚本检查变量PS1,在非交互式脚本中,它不被设置,而在交互式脚本中被设置。例如:

if [ -z "$PS1" ]; then
  echo This shell is not interactive
else
  echo This shell is interactive
fi

6.3.3 交互式shell行为

当shell运行在交互模式下,它的行为在某些方面改变了。

1. 按照 Bash启动文件 章节中的描述,读取和执行启动文件。

2. 默认启用作业控制(见 作业控制 章节)。当作业控制有效时,Bash忽略键盘产生的作业控制信号:SIGTTIN, SIGTTOU, 和 SIGTSTP。

3. Bash在读取命令的第一行之前,扩展和显示 PS1 ,在读取命令的第二行及后续的行之前扩展和显示 PS2 。

4. Bash在打印提示符 $PS1(见 Bash变量)之前,把变量 PROMPT_COMMAND 的值,当作命令执行。

5. Readline(见 命令行编辑 章节)用来从用户终端读取命令。

6. Bash在读取命令时,当它从标准输入接收到EOF时,不是立即退出,而是检测 set -o 的选项 ignoreeof 的值。(见 set内建命令 章节)

7. 命令历史(见 Bash历史工具 章节)和历史扩展(见 历史交互 章节)是默认启用的。交互式shell在退出时,Bash将保存命令历史到文件名为 $HISTFILE 的文件中。

8. 默认执行别名扩展(见 别名 章节)。

9. 没有其他陷阱时,Bash忽略 SIGTERM (见 信号 章节)。

10. 没有其他陷阱时,捕获并处理 SIGINT 。SIGINT 会中断某些shell内建命令。

11. 交互式登录shell在退出时,如果启用了 huponexit 选项,则shell发送 SIGHUP 到所有作业。(见 信号 章节)

12. 忽略 -n 调用选项,而 ‘set -n‘ 没有效果(见 set内建命令 章节)。

13. Bash会定期检查邮件,依赖于MAIL, MAILPATH, 和 MAILCHECK 变量(见 Bash变量 章节)。

14. 在启用了 ‘set -u‘ 后,由于参照了未绑定的shell变量而发生的扩展错误,不会导致shell退出。(见 set内建命令 章节)

15. 在 ${var:?word} 中,由于 var 未设置或者值为空,而引起的扩展错误,不会导致shell退出。(见 shell参数表达式 章节)

16. shell内建命令引起的重定向错误,不会导致shell退出。

17. 运行在POSIX模式下,一个特定的内建命令返回错误状态,不会导致 shell退出。(见 POSIX 模式 章节)

18. exec执行失败,不会导致shell退出。(见 Bourne shell内建命令 章节)

19. 解析错误不会导致shell退出。

20. 默认启用 cd 内建命令的目录参数的简单拼写修正功能。(见 shopt 内建命令 章节中的shopt内建命令的cdspell选项的描述)

21. 打印 $PS1 之后,在指定秒数内,没有读到命令时,shell会检查 TMOUT 的值并退出。(见 shell变量 章节)

时间: 2024-11-16 08:13:14

bash参考手册之六(Bash特性)续二的相关文章

bash参考手册之五(shell变量)续二

EMACS 如果Bash在shell启动时,在环境中发现这个变量的值是 't',则会认为shell在Emacs shell缓冲区中运行,而禁止行编辑. ENV 类似于BASH_ENV,在shell以POSIX模式调用时使用.(见Bash POSIX模式) EUID 当前用户的数字形式的有效用户ID.这个变量是只读的. FCEDIT 内建命令fc带-e选项时的默认编辑器. FIGNORE 冒号分隔的后缀列表,该列表的内容在执行文件名完成时忽略.一个文件名的后缀匹配FIGNORE中的一个元素时,则该

bash参考手册之五(shell变量)续三

LINENO 当前在执行的脚本或者shell函数的行号. LINES 命令select用来确定打印选择列表的列宽.收到SIGWINCH后,自动设置. MACHTYPE 是一个字符串,描述了正在运行Bash的系统的类型,描述的格式符合GNU cpu-company-system 标准. MAILCHECK 确定多长时间间隔(以秒为单位),shell要去由变量MAILPATH和MAIL的值指定的文件中,检查邮件.默认值是60秒.当检查邮件的时间到了,shell在显示提示符前执行检查动作.如果这个变量

Ogre参考手册(二)3.1.1-3.1.2 材质、技术、通道

说明 翻译自Ogre 1.81 manual,在不影响理解的情况下做了删减,以减小阅读的时间和翻译的工作量 这么做只是去掉了文字上修饰部分,并没有减少任何原文档中的知识点,可以作为对等的参考手册 另外对一些不易理解的部分做了修改,或通过“附”做了标注 如果你发现了不易理解的部分,可以跟帖回复,我会原文做修改或回复 注:原文编写时间2006年第三季度,已经接近十年 所以里面所说的老显卡都已是古董,先进显卡也已是老显卡 3 脚本 Ogre的很多功能可以通过脚本驱动,以便于设置.脚本都是简单的文本文件

tcpdump 命令参考手册

对于 tcpdump 的使用,大部分管理员会分成两类.有一类管理员,他们熟知 tcpdump 和其中的所有标记:另一类管理员,他们仅了解基本的使用方法,剩下事情都要借助参考手册才能完成.出现这种情况的原因在于, tcpdump 是一个相当高级的命令,使用的时候需要对网络的工作机制有相当深入的了解. 在今天的文章中,我想提供一个快速但相当实用的 tcpdump 参考.我会谈到基本的和一些高级的使用方法.我敢肯定我会忽略一些相当酷的命令,欢迎你补充在评论部分. 在我们深入了解以前,最重要的是了解 t

Microsoft Visual C++ 6.0预处理器参考手册

返回总目录 Microsoft Visual C++ 6.0 预处理器参考手册 目录引言.......................................................................................................................3 特殊术语.................................................................................

EL表达式参考手册

一.EL简介 1.语法结构     ${expression}2.[]与.运算符     EL 提供.和[]两种运算符来存取数据.    当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 [].例如:        ${user.My-Name}应当改为${user["My-Name"] }    如果要动态取值时,就可以用[]来做,而.无法做到动态取值.例如:        ${sessionScope.user[data]}中data 是一个变量3

Dubbo -- 系统学习 笔记 -- 配置参考手册

配置参考手册 <dubbo:service/> <dubbo:reference/> <dubbo:protocol/> <dubbo:registry/> <dubbo:monitor/> <dubbo:application/> <dubbo:module/> <dubbo:provider/> <dubbo:consumer/> <dubbo:method/> <dubbo:

lua参考手册01—

2 - 语言 这一节从词法.语法.句法上描述 Lua . 换句话说,这一节描述了哪些 token (符记)是有效的,它们如何被组合起来,这些组合方式有什么含义. 关于语言的构成概念将用常见的扩展 BNF 表达式写出.也就是这个样子: {a} 意思是 0 或多个 a , [a] 意思是一个可选的 a . 非最终的符号会保留原来的样子,关键字则看起来像这样 kword , 其它最终的符号则写成 `=´ . 完整的 Lua 语法可以在本手册最后找到. 2.1 - 词法约定 Lua 中用到的 名字(也称

JSTL标签参考手册

前言 ========================================================================= JSTL标签库,是日常开发经常使用的,也是众多标签中性能最好的.把常用的内容,放在这里备份一份,随用随查.尽量做到不用查,就可以随手就可以写出来.这算是Java程序员的基本功吧,一定要扎实. JSTL全名为JavaServer Pages Standard Tag Library,目前最新的版本为1.1版.JSTL是由JCP(Java Comm