Shell特性

shell特性

可以通过打开或者关闭Bourne Again Shell的功能的方式来控制它的行为。不同的功能使用不同的方法开启和关闭。内置命令set控制着一组功能,而内置命令shopt控制另外一组命令。还可以调用bash在命令行中控制很多功能。

特性、选项还是变量?

提示 为了避免术语上的歧义,本书将用户可控制的shell的不同行为称为特性。bash info页面称之为“选项”和“控制可选shell行为的变量的值”。

1. set ±o:开启和关闭shell特性

通过使用-o或者+o选项,内置命令set(tcsh中有一个内置命令set,但是它的工作方式不同)可开启、关闭并列出某些bash特性。举例来说,下面的命令将开启noclobber特性:

 

$ set -o noclobber

 

使用下面的命令可以关闭这项特性(默认):

 

$ set +o noclobber

 

如果命令set -o不带任何选项,那么它将列出所有由set控制的每一项特性及其状态(开启还是关闭)。不带选项的命令set +o以一种特殊的形式列出了这些特性,用户可以依据它所给出的形式输入到shell中。表8-13列出了bash特性。

表8-13  bash特性

                 语法
allexport 在执行这条命令之后自动输出用户创建的所有变量和函数 set -o allexport set -a
braceexpand 使bash执行花括号扩展(默认) set -o

braceexpand

set -B
cdspell 纠正传递给cd的参数中目录名中小的拼写错误 shopt -s cdspell  
cmdhist 保存一个多行命令中的所有文本行,如果需要将添加分号 shopt -s cmdhist  
dotglob 使模糊文件引用中的shell特殊字符(通配符)来匹配以句号(.)开头的文件名;默认情况下,这些特殊字符并不匹配开头的句号;必须总要显式地指定文件名.和..,因为没有模式曾匹配它们 shopt -s dotglob  
emacs 为命令行编辑指定emacs模式(默认) set -o emacs  
errexit 使bash在遇到简单的命令失败(而不是控制结构)时退出 set -o errexit set -e
execfail 使shell脚本在找不到exec参数所指的文件时继续运行;默认情况下,当exec找不到其参数指定的文件时,脚本将终止 shopt -s execfail  

                                                                                                                                                         (续表)   

                用语 
expand_aliases 使别名扩展(默认情况下,对于交互式shell是开启的,而对于非交互式shell是关闭的) shopt -s

expand_alias

 
hashall 使bash记住它使用PATH找到的命令的位置 set -o hashall set -h
histappend 在shell退出时,使bash把历史列表追加到HISTFILE命令的文件后面;默认情况下,bash会覆盖掉这个文件 shopt -s

histappend

 
histexpend 使历史机制(使用感叹号)工作(默认);关闭这个特性将关闭历史扩展 set -o histexpand set -H
history 开启命令历史特性(默认情况下是开启的) set -o history  
ignoreeof 指定bash接收到10次EOF字符之后才能退出;在信号不好的链路上很有用 set -o ignoreeof  
monitor 启用作业控制(默认启用) set -o monitor set -m
nocaseglob 使模糊文件引用匹配文件名而不区分大小写(默认关闭) shopt -s

nocastglob

 
noclobber 帮助阻止文件覆盖(默认关闭) set -o noclobber set -C
noglob 关闭路径名扩展(默认关闭) set -o noglob set -f
notify 如果启用了作业控制,将立即报告后台作业的终结状态;默认行为是在显示下一个提示符之前显示该状态 set -o notify set -b
nounset 当在交互式shell中使用未设置变量时,将显示一条错误消息并退出shell脚本 set -o unset set –u
nullglob 使bask扩展模糊文件引用,这些模糊文件引用不能将文件名与一个空字符相匹配。默认情况下,bash无需扩展这些文件引用就可以传递它们 shopt-s nullglob  
posix 以POSIX模式返回bash set-o posix  
verbose 当bask读取命令行时显示这些命令行 set-o verbose set-v
vi 为命令行的编辑指定vi编辑模式 set-o vi  
xpg_echo 使内置命令cd在无需-e选项的情况下扩展反斜线转义序列 shopt –s xpg_echo  
xtrace 启用shell调试功能 set-o xtrace set-x

2. shopt:开启和关闭shell特性

内置命令shopt(shell option)开启、关闭和列出那些控制着shell行为的某些bash特性。举例来说,下面的命令将使bash在扩展模糊文件引用时,包含那些以句号(.)开头的文件名,-s表示设置:

 

$ shopt -s dotglob

 

通过下面的命令可将这项特性关闭(默认),-u表示取消设置:

 

$ shopt -u dotglob

 

如果只将特性的名称作为shopt唯一的参数,shell显示该特性是如何设置的:

 

$ shopt dotglob
dotglob          off

 

命令shopt不带任何选项或者参数时,将列出由shopt控制的那些特性及其状态。命令shopt -s不带参数时,将列出那些由shopt控制并设置为开启的特性。命令shopt –u将列出那些被取消或者关闭的bash特性。表8-13列出了bash特性。

使用shopt设置set ±o特性

提示 可以使用shopt设置或者取消那些由set ±o控制的特性。使用常规的shopt –s或者-u语法,并包含-o选项。举例来说,下面的命令将开启noclobber特性:

 

$ shopt –o –s noclobber