8.8
控制bash的特性和选项
本节解释了如何使用命令行选项和内置命令set和shopt控制bash的功能和选项。
8.8.1 命令行选项
有两种类型的命令行选项:短选项和长选项。短选项由一个连字符后面跟着一个字母构成,而长选项由两个连字符后面跟着多个字母构成。在bash中,同一个命令行上的长选项必须放在短选项之前。表8-12列出了一些常用的命令行选项。
表8-12 命令行选项
选
项
|
解
释
|
语
法
|
help
|
显示用法信息
|
--help
|
no edit
|
阻止用户在交互式shell中使用Readline库编辑命令行
|
--noediting
|
no profile
|
阻止读取初始化文件/etc/profile、~/.bash_profile、~/.bash_login和~/.profile
|
--noprofile
|
no rc
|
阻止读取~/.bashrc初始化文件;如果shell以sh调用的话,这个选项默认是打开的
|
--norc
|
POSIX
|
在POSIX模式下运行bash
|
--posix
|
version
|
显示bash版本信息并退出
|
--version
|
login
|
使bash像登录shell一样运行
|
-l(小写l)
|
shopt
|
带上shopt选项opt运行shell;-O(大写O)设置该选项,+O删除该设置
|
[+-]O [opt]
|
end of options
|
在命令行中发信号表示选项结束;后面的字将作为参数,即使它们以连字符(-)开头
|
--
|
8.8.2 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
|
- 发表于 2008-7-9 23:12:50
- 很棒的书,内容很全。强力推荐!!
- 发表于 2008-3-26 17:05:45
- 这本书在amzon上,24个书评中几乎全部是4星,还有几个是5星。怪不得,清华敢要这种价格,这价格够高的...
- 发表于 2008-3-26 17:04:49
- 确实不便宜啊,忍了忍还是过段时间再说,先看看电子书吧
- 发表于 2008-3-26 17:04:20
- 这书今天总算到了,整体感觉不错,里面内容由浅入深,强烈推荐给大家!
- 发表于 2008-3-26 17:03:55
- 听朋友说这本书很不错,而且又有微软的送书券,所以就订购了一本。
- 发表评论
阅读(3079) | 评论(0) | 转发(0) |