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 |






