二十二、shell内置命令
除非另外说明,内置命令如果接受由-引导的选项,那么它也接受--,来表示选项的结束。内置命令:,true,false和test不接受选项并且尤其不处理--引导的选项。内置命令exit,logout,break,continue,let和shift接受和处理以-开头的参数不需要以--开头的。其他接受参数但是不能接受特定选项的内置命令解释以-作为无效选项开头的参数并且需要--来阻止这样的解释。
: [arguments]
没有效果;这个命令除了展开arguments和任何指定的重定向之外,不做任何事。退出时返回值为0。
. filename [arguments]
source filename [arguments]
读取并在当前shell环境中执行filename中的命令,返回filename中最后一个命令的退出状态。如果filename中不包含斜杠(slash),系统将在PATH中查找包含filename的目录。在PATH中查找的文件不需要是可执行的。当bash不在posix mode中时,如果在PATH中找不到文件就会在当前目录查找。如果内置命令shopt的sourcepath选项被关闭,PATH将不会被查找。如果提供了任何arguments,在filename被执行时它们成为的位置参数。否则位置参数不发生变化。返回状态是脚本中最后一个命令退出时的状态。没有执行命令则返回0,如果没有找到或不能读取filename的话,返回值为false。
alias [-p] [name[=value] ...]
Alias不带参数或者带-p选项运行时将在标准输出以这样的格式alias name=value给出别名列表。如果为其提供了参数,将创建提供了value的name的别名。value中尾部的空格使得别名被展开时,下一个字做别名替换。对于参数列表中的每一个name,如果value没有给出,这个别名的名称和值会被打印出来。除非name没有定义为别名,否则Alias返回true。
bg [jobspec]
使挂起的程序jobspec在后台继续执行,就好像它是用"&"启动的一样。如果没有指定jobspec,shell意义上的当前作业将被使用。 除非在禁止了作业控制时运行或者在允许作业控制时运行,或者没有发现任何指定的jobspec,或者它不是在作业控制下启动的,否则bg jobspec返回0。
bind [-m keymap] [-lpsvPSV]
bind [-m keymap] [-q function] [-u function] [-r keyseq]
bind [-m keymap] -f filename
bind [-m keymap] -x keyseq:shell-command
bind [-m keymap] keyseq:function-name
bind readline-command
显示当前行编辑功能的按键绑定和函数绑定结果,将一个按键序列和一个行编辑功能的函数或宏进行绑定,或者设置一个行编辑功能的变量。每一个在非选项的参数都是一个命令,因为它会在.inputrc文件中出现,但是每个绑定结果或者命令必须作为单独的参数传递;例如:'"\C-x\C-r":re-read-init-file'。 如果提供了选项,它们有如下的意义:
-m keymap
使用keymap作为keymap通过后续的绑定被接受。可选的keymap名称是emacs,emacs-standard,emacs-meta,emacs-ctlx,vi,vi-move,vi-command以及vi-insert。vi和vi-command等价;emacs和emacs-standard等价
-l
列出所有的行编辑功能的函数名。
-p
以可被读取的方式显示行编辑功能函数名称和绑定结果
-P
列出当前行编辑功能函数的名称和绑定。
-s
以可被读取的方式显示行编辑功能中被绑定到宏的按键序列和他们输出的字符串。
-S
显示行编辑功能中被绑定到宏的按键序列和他们输出的字符串。
-v
以可被读取的方式显示行编辑功能变量名称和值
-V
列出当前行编辑功能变量名和值。
-f filename
从filename中读取按键的绑定关系
-q function
查询哪些键将调用名为function的函数。
-u function
取消所有绑定到function函数的按键。
-r keyseq
删除当前所有对于keyseq的绑定关系。
-x keyseq:shell-command
使shell-command在keyseq按下时被执行。当shell-command被执行时,shell设置READLINE_LINE变量为行编辑功能的行缓冲区并且将READLINE_POINT变量的值设置为当前插入点的位置。如果执行命令改变了READLINE_LINE或READLINE_POINT的值,那些新的值会在被反应在编辑状态中。
返回值是0,除非给出了一个不能识别的选项或是产生了一个错误。
break [n]
从一个for,while,until或者select循环退出。如果n被指定,就跳出n层循环。n必须≥1。如果n比当前循环层数还要大,将跳出所有循环。当n≤0时返回值是非0的;否则返回值为0。
builtin shell-builtin [arguments]
执行指定的shell内置命令,传递arguments给该命令,返回该命令的返回值。这在定义一个和shell内置命令同名的函数时很有用,者将保留使用函数的内置功能。内置命令cd常以这种方式重新定义。如果指定的shell-builtin并不是一个shell内置命令,那么返回状态是false。
caller [expr]
返回所有活动子例程的上下文。如果不带expr,caller显示命令行号和当前子例程调用的原文件名。如果以一个非负整数作为expr,caller会显示行号,子例程名称和源文件当前调用栈中的相应的位置。这样的外部信息可能会被使用,例如,显示一个栈追踪。当前帧时第0帧。除非shell没有执行子例程调用或者expr没有对应调用栈中的有效位置,否则,返回值为0。
cd [-L| [-P [-e]] [dir]
改变当前目录为dir。变量HOME的值是dir的默认值。环境变量CDPATH定义了包含dir的查找路径。在CDPATH变量中备选的路径名以冒号分隔。CDPATH变量中的空目录名与当前目录相同,即'.'。如果dir以斜杠起始,那么CDPATH不会被使用。-P选项是说使用物理路径结构而不是跟随符号链接,-L选项则强制跟随符号链接。如果-e选项和-P选择一起使用,在一次成功的目录改变之后,当前工作目录无法再做成功的判断,cd命令会返回一个不成功的状态。-参数等同于$OLDPWD。如果使用CDPATH中的一个非空目录名,或者如果"-"时第一个参数,并且目录改变时成功的,新工作目录的绝对路径名就会被写到标准输出。如果成功地改变了目录返回值是true;否则是false。
command [-pVv] command [arg ...]
使用args作为参数来运行command将禁止正常的shell函数的查找。只有内置命令或者PATH变量中包含的命令才可以执行。如果给出-p参数,对command的查找是以保证找到所有的标准实用工具的PATH的默认值进行的。如果提供-V选项或者是-v选项,就会显示处command相关的说明。-v选项使得一个单独的代表命令的字或者用于调用command的文件名得以显示出来;-V选项给出更详细的描述。如果提供了-V或者-v选项,且如果找到了command的情况下退出状态为0,没找到就是1。如果没有提供选项,并且产生了错误或者没有找到command,退出状态就是127。否则,内置命令command的退出状态是其后面command的退出状态。
compgen [option] [word]
根据option为word生成可能的补全匹配。这可以是任何被内置命令complete使用除了-p和-r之外的选项所接受的选项,并将匹配到的结果写到标准输出。当使用-F或-C选项时,许多的shell变量由可编程补全功能来设置,如果是这样的花,将不再有可用值。
即使已经从补全规则中用通用的标记直接生成可编程补全代码,也会利用同样的方法生成匹配项。如果指定了word,只有匹配word的补全结果才被显示出来。
除非提供了无效的选项,或者没有生成匹配项,否则返回值即为真。
complete [-abcdefgjksuv] [-o comp-option] [-DE] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] name [name ...]
complete -pr [name ...]
指定每个name的参数应当如何被补全。如果提供了-p选项,或者如果没有选项选项,现有的补全规则将以一种作为输入允许被重用的方式被显示出来,-r选项将针对每个name删除其补全规则。或者,如果没有给出name,将删除所有补全规则。-D选项意味着将剩余的选项和动作应该被用于"default"命令补全;也就是说,在先前已定义没有补全的命令上可以尝试着补全了。-E选项指定是剩下的选项和动作应该被用于"empty"命令的补全;也就是说,在一个空行上尝试补全。
在尝试字的补全时,用于这些补全规则的进程在上面Programmable Completion(可编程补全)中详述。
如果给出其他选项的话,具有下列意义。
-G,-W和-X选项的参数(如果需要的话,还包括-P和-S选项)应当被引用以避免在调用内置命令complete之前被展开。
-o comp-option
comp-option控制着补全规则的除了简单地生成补全之外的多种行为。comp-option可以是如下之一:
bashdefault
如果补全规则没有生成匹配项,执行默认bash补全的其余部分。
default
如果补全规则没有生成匹配项,使用行编辑功能的默认文件名补全。
dirnames
如果补全规则没有生成匹配项,执行目录名补全。
filenames
告诉行编辑功能,补全规则生成了文件名,因此它可以进行任何专用文件名的处理(例如,给目录名加上斜杠,引用特殊字符或消除尾部空白)。主要用于shell函数。
nospace
告诉行编辑功能不要向在行的结束处补全的字添加空格(这是默认行为)。
plusdirs
在所有通过补全规则生成的匹配项定义之后,将会尝试目录名补全并且所有匹配项会被添加到另一个动作的结果中。
-A action
action可以是下列之一,来产生一系列可能的补全结果:
alias
起别名。也可以用-a指定。
arrayvar
数组变量名。
binding
行编辑功能按键绑定。
builtin
shell内置命令的名称。也可以用-b选项指定。
command
命令名。也可以用-c选项指定。
directory
目录名。也可以用-d选项指定。
disabled
被禁用的内置命令名称。
enabled
启用的内置命令名称。
export
被导出的shell变量名称。也可以用-e选项指定。
file
文件名。也可以用-f选项指定。
function
shell的函数名。
group
组名。也可以用-g选项指定。
helptopic
内置命令help接受的帮助主题。
hostname
主机名,通过shell变量HOSTFILE指定的文件中得到。
job
作业名,如果作业控制被激活的话。也可以用-j选项指定。
keyword
shell保留字。也可以用-k选项指定。
running
正在运行的作业名,如果作业控制被激活的话。
service
服务名。也可以用-s选项指定。
setopt
内置命令set的-o选项的有效参数。
shopt
内置命令shopt接受的shell选项名。
signal
信号名。
stopped
停止的作业名,如果作业控制被激活的话。
user
用户名。也可以用-u选项指定。
variable
shell变量的名称。也可以用-v选项指定。
-C command
command 在子shell环境中被执行,并且它的输出被用作可能的补全。
-F function
shell函数function在当前shell环境中被执行。当它完成时,可能的补全会从数组变量CPMPREPLY的值中被取回。
-G globpat
文件名展开模式globpat被展开,生成可能的补全。
-P prefix
在所有其他选项都使用过之后,prefix被加到每个可能的补全的起始处。
-S suffix
在所有其他选项都使用过之后,suffix被附加到每个可能的补全后面。
-W wordlist
wordlist使用IFS特殊变量中的字符作为定界符被拆分,每个结果的字被展开。可能的补全是匹配被补全的字的结果列表中的成员。
-X filterpat
filterpat是一个用于路径名展开的模式。它适用于由前面的选项和参数生成的可能的补全的清单,每一个匹配filterpat的补全都被从列表中删除。为filterpat加上前导!使模式意义相反;这种情况下,所有不匹配filterpat的模式被删除。
除非提供了非法的选项,在没有给出name参数时提供了除-p和-r之外的某个选项,试图删除一条name的补全规则但是规则不存在,或者添加补全规则时出错,否则返回值为真。
compopt [-o option] [-DE] [+o option] [name]
根据options为每个name修改补全选项,或者如果没有提供names,修改当前执行的补全选项。如果没有给出选项,为每个name或当前补全显示其补全选项。option可能的取值为上面介绍过的内置命令complete的有效值。-D选项意味着剩余选项将用于"default"命令补全;也就是说,在先前已定义没有补全的命令上可以尝试着补全了。-E选项指定是剩余选项应该被用于"empty"命令的补全;也就是说,在一个空行上尝试补全。
除非提供了无效的选项,试图删除一条name的补全规则但是规则不存在,或者发生输出错误,否则返回值为真。
continue [n]
复位到for,while,until或select循环的下一次封闭循环。如果指定了n,复位到向外第n层循环。n必须≥1。如果n比封闭循环的层数更多,将复位到顶层循环。continue在循环内部被执行时,如果n≤0则返回值为非0;否则返回值是0。当continue在循环外部执行时,返回值为0。
declare [-afFirtx] [-p] [name[=value]]
typeset [-afFirtx] [-p] [name[=value]]
声明变量且/或设置它们的属性。如果没有给出name则显示变量的值。-p选项将显示每个name的属性和值。当-p选项和name参数共同使用时,额外的选项被忽略。当-p选项没有和name参数一同提供的时候,会显示所有拥有通过额外选项指定属性的变量的属性和值。如果没有其他选择与-p同时使用,declare会显示所有shell变量的属性和值。-f选项严格限制只显示shell函数。-F选项禁止函数定义内容的显示;只显示函数名和属性。如果shell选项extdebug用shopt命令启用,源文件名和函数定义的行号也会被显示出来。-F选项暗含-f。-g选项强制在全局范围内定义和修改变量,即使declare在shell函数中被执行也是如此。其他所有的情况下都会将之忽略。下列选项可用来限制输出到特定属性的变量或者为变量设置属性:
-a
每个name都是索引数组变量。
-A
每个name都是关联数组变量。
-f
只使用函数名。
-i
变量被当作一个整数;当变量被赋值时将进行算术运算。
-l
当变量被赋值时,所有大写字母的字符都会被转换成小写字母。大写属性被禁用。
-r
使得name只读。这些名称不能再被后续的子查询赋值语句赋值或撤销。
-t
为每个name设置跟踪属性。被跟踪的函数继承了调用者shell的DEBUG和RETURN的捕获器。跟踪属性对变量没有特殊意义。
-x
标记name为可以通过环境导出给后续命令。
使用'+'代替'-'将关闭替代属性,+a不能用于销毁一个数组变量和+r不能删除只读属性是例外。当用于函数中时,除非提供了-g选项,否则它将使得每个name成为局部的,就像使用了local命令。如果一个变量名后紧跟着"=value",变量值就被设置为value。除非遇到了无效的选项,试图使用'-f foo=bar'定义函数,试图向只读变量赋值,试图向数组变量赋值但没有使用复合的赋值语法,name之一不是有效的shell变量名,试图将数组变量的数组状态关闭,或者是试图使用-f显示一个不存在的函数,否则返回值为0。
dirs [-clpv] [+n] [-n]
没有选项时显示当前保存的目录列表。默认输出在一行中,目录名用空格分开。可以使用pushd命令将目录添加到列表,popd命令将列表中的条目删除。
+n
在不使用选项调用dirs命令是,显示由dirs命令展示出来的列表中自左侧起从0开始计数的第n个条目。
-n
在不使用选项调用dirs命令是,显示由dirs命令展示出来的列表中自右侧起从0开始计数的第n个条目。
-c
通过删除所有条目以清空目录栈。
-l
产生一个长列表;默认列表格式使用波浪线来表示家目录。
-p
显示目录栈,每行一个条目。
-v
显示目录栈,每行一个条目,每个条目前缀上它在栈中的位置索引。
返回值是0,除非给出了无效的参数,或者n索引超出了目录栈的范围。
disown [-ar] [-h] [jobspec ...]
没有选项时,从活动作业表中删除每个jobspec。如果jobspec不存在,并且既没有提供-a选项也没有提供-r选项的话,shell的当前作业的概念是使用。如果给出了-h选项,每个jobspec并不从表中删除,而是被标记,使得即使shell接到SIGHUP信号,也不会向作业发出SIGHUP信号。如果没有给出jobspec,-a选项意味着删除或标记所有作业;不带jobspec参数-r选项对正在运行的作业进行限制操作。返回值是0,除非jobspec没有指定有效的作业。
echo [-neE] [arg ...]
输出args,以空格分开,最后跟一个换行符。返回值总是0。如果指定了-n选项,将不在尾部添加换行符。如果给出了-e选项,下列反斜杠转义字符的解释功能也将开启。-E选项禁止这些转义字符的解释,即使在默认解释它们的系统中也是如此。shell选项xpg_echo可以用来在动态判断echo是否默认展开这些转义字符。 echo不将--解释为选项的结束。 echo解释下列转义序列:
\a
响铃
\b
退格
\c
删除尾部换行符
\e
字符Esc
\f
进纸
\n
换行符
\r
回车
\t
水平制表符
\v
竖直制表符
\\
反斜杠
\0nnn
一个八比特字符,它的值是八进制值nnn(零到三个八进制数字)。
\xHH
一个八比特字符,它的值是十六进制值HH(一到两个十六进制数字)。
\uHHHH
Unicode(ISO/IEC 10646)字符,它的值是十六进制值HHHH(一到四个十六进制数字)。
\uHHHHHHHH
Unicode(ISO/IEC 10646)字符,它的值是十六进制值HHHHHHHH(一到八个十六进制数字)。
enable [-adnps] [-f filename] [name ...]
允许或禁止shell内置命令。禁止一个内置命令使得磁盘上的与内置命令同名的文件得以运行,不必使用它的完整路径,即使shell一般在查找磁盘上的命令之前查找内置命令。如果使用了-n选项,每个name都被禁止;否则,name被启用。例如,要使用通过PATH查找到的test命令而不是shell的内置版本,可以运行"enable -n test"。-f选项意味着在支持动态加载的系统上,从共享库filename中加载新的内置命令name。-d选项将删除曾经用-f加载的内置命令。如果没有给出name参数,或者给出了-p选项,将显示shell内置命令的列表。没有其他选项参数,这个列表只包含所有启用的shell内置命令;如果提供了-n选项,将只显示被禁止的内置命令;如果提供了-a选项,显示包含所有内置命令的列表,还有命令是否被启用的提示;如果提供了-s选项,输出被限制为POSIX 的内置命令special。返回值是0,除非name不是shell的内置命令,或者从共享库中加载新的内置命令时出错。
eval [arg ...]
args被读取并连结为一个单独的命令。这个命令被shell读取并执行,它的退出状态被作为eval的值返回。如果没有args,或仅仅包含空参数,eval返回0。
exec [-cl] [-a name] [command [arguments]]
如果指定了command,它将代替shell。不会创建新的进程。arguments成为command的参数。如果提供了-l选项,shell将在传递给command的第0个参数前面加上一个连字符。这样login(1)做的事情。-c选项使得command在一个空环境中执行。如果提供了-a选项,shell将name作为第0个参数传递给要执行的命令。如果由于某些原因导致command不能执行,那么对于非交互的shell来说就会退出,除非shell选项execfail被设置为启用,这种情况下它返回失败。如果文件不能被执行,交互的shell就返回失败。如果没有指定command,任何重定向对当前shell生效,且返回值是0。如果发生重定向错误,返回状态是1。
exit [n]
使得shell以状态值n退出。如果n被忽略,退出状态是最后执行的命令的退出状态。在shell终止前,EXIT上的信号捕获器将被执行。
export [-fn] [name[=word]] ...
export -p
给出的names被标记为自动地导出到后续命令的执行环境中。如果给出了-f选项,names指的是函数。如果没有给出names,或者如果给出了-p选项,就打印出在这个shell中被导出的所有名字的列表。选项-n使得从每一个names中的导出属性被删除。如果变量名后面跟着"=word"的字样,变量的值就会被设置为"word"。export返回一个为0退出状态码,除非遇到了无效的选项,names中有一个不是有效的shell变量名,或者给出了-f选项,而name不是一个函数。
fc [-e ename] [-nlr] [first] [last]
fc -s [pat=rep] [cmd]
命令修复。在第一种形式中,从first到last的一系列的命令都会从历史列表中选取。First和last可以指定为字符串(可以定位最后一个以此字符串开始的命令)或者数字(历史列表中的索引,负数被当作相对当前命令号的偏移)。如果没有指定last,它在列举时被设为当前命令(因此"fc -l -10"将输出最后10条命令),其他情况下被设为first。如果没有指定first,first将因为编辑而被设置为前一个命令,同时因为列表显示而将其设置为-16。
-n选项将在列举时阻止显示命令编号。选项-r将命令顺序进行掉换。如果给出了-l选项,命令将列举在标准输出上。否则,通过ename给出的编辑器就会被调用,来编辑包含这些命令的文件。如果没有给出ename,将使用变量FCEDIT的值,如果FCEDIT没有定义就使用EDITOR的值。如果仍然没有定义,将使用vi。编辑结束后,被编辑的命令将回显并执行。
第二种形式中,command在每个pat的实例被rep替换后都被重新执行。使用这种特性时可以起一个有用的别名: "r=fc -s", 这样输入"r cc"将运行最后的以"cc"开头的命令,输入"r",将重新执行上一个命令。
如果使用第一种形式,返回值是0,除非遇到了无效的选项,或first或last指定的历史行数超出了范围。如果给出了-e选项,返回值是最后执行的命令的返回值,或着是失败,如果临时文件中的命令执行出错。如果使用第二种形式,返回状态是重新执行的命令,除非cmd没有指定一个有效的历史行,这种情况下fc返回失败。
fg [jobspec]
将jobspec恢复至前台,使它成为当前作业。如果jobspec不存在,将使用shell意义上的当前作业。返回值是被放到前台的命令的状态,或者如果在禁用作业控制时运行则返回失败状态,或者在启用作业控制时运行,但jobspec没有指定有效的作业,或jobspec指定了没有使用作业控制启动的作业,也会发挥失败状态。
getopts optstring name [args]
getopts借助于shell程序来分析位置参数。optstring包含要识别的选项字符;如果某个字符后跟着冒号,那么这个选项需要有一个需要用空白字符和它隔离开的参数。冒号和问号字符不能用作选项字符。每次它被调用时,getopts将下一个选项放在shell变量name中,如果name不存在就将之初始化;下一个要处理的参数的索引放在变量OPTIND中。每次shell或shell脚本被调用的时候OPTIND被初始化为1。当某个选项需要参数时,getopts将那个参数放到变量OPTARG中。shell不会自动重置OPTIND;在使用相同的shell调用进行多次getopts调用期间如果使用了一系列新的参数的话它必须被手动重置。
当遇到选项结束的时候,getopts以大于0的值退出。OPTIND被设置为第一个非选项参数的索引,name被设置为?。
getopts通常分析位置参数,但是如果args中给出了更多参数,getopts将分析它们。
getopts能以两种方式报告错误。如果optstring的第一个字符是冒号,将使用安静的错误报告。通常的操作中,遇到非法选项或缺失选项的参数时将显示出诊断信息。如果变量OPTERR被设置为0,即使optstring的第一个字符不是冒号,也不会显示错误消息。
如果发现了一个非法的选项,getopts向name中置入问号,并且如果不是安静模式的话,显示错误消息并撤销变量OPTARG的定义。如果getopts是安静模式,找到的选项字符将置入OPTARG并且不显示诊断消息。
如果没有找到需要的参数,并且getopts不是安静模式,将向name置入一个问号,撤销OPTARG的定义,显示诊断消息。如果getopts是安静模式,那么将向name置入一个冒号并且OPTARG将设置为找到的选项字符。
如果找到了指定的或未被指定的选项,getopts返回真。如果遇到了选项结束或者发生了错误,它返回假。
hash [-lr] [-p filename] [-dt] [name]
每一次hash命令被调用时,name命令的完整路径名称会通过查找PATH变量中的目录进行判断并记录下来。而之前记录的路径名将被放弃。如果提供了-p选项,则不会进行路径查找,直接将filename作为命令的全路径名来使用。-r选项使得shell清除掉所有已记录的位置。-d选项使得shel清除掉已记录的每个name的位置。如果提供了-t选项,每个name相应的完整路径名被显示出来。如果给出多个name作为-t的参数,在哈希全路径名之前name就会被显示出来。-l选项使得输出以一种可以重用为输入的格式显示。如果没有给出参数,或者只给出了-l选项,已记录的命令的信息将被显示出来。除非name没有找到或给出了非法的选项,否则返回真。
help [-s] [pattern]
显示关于内置命令的帮助信息。如果指定了pattern,help给出关于所有匹配pattern的命令的详细帮助;否则所有内置命令的帮助和shell控制结构将被显示出来。
-d
显示每个pattern的简短描述信息。
-m
以man手册类的格式显示每个pattern的描述信息。
-s
仅显示每个pattern的简短的用法概要。
除非没有匹配pattern的命令,否则返回0。
history [n]
history -c
history -d offset
history -anrw [filename]
history -p arg [arg ...]
history -s arg [arg ...]
不带选项的话,显示带行号的命令历史列表。列出的行中含有*的是已经被修改过。参数n使得只显示最后n行。如果shell变量HISTTIMEFORMAT被设置并且为非空,它就会被当作一个格式字符串被用来显示能够关联到每一个被显示的历史条目的时间戳。在格式化的时间戳和历史行之间不会显示介于期间的空白字符。如果提供了filename,它被当做历史文件名而使用;如果没有的话,就使用HISTFILE的值作为历史文件名。如果提供了选项,则具有下列意义:
-c
清空历史列表,删除所有条目。
-d offset
删除offset位置的历史条目。
-a
将新的历史条目(自当前bash会话开始输入的历史命令)追加到历史文件中。
-n
将尚未从历史文件中读取的历史条目读入当前历史列表。这些行是当前bash会话开始之后,才追加到历史文件中的行。
-r
读取历史文件的内容,使用它们作为当前历史。
-w
将当前历史列表写入历史文件,覆盖历史文件的原有内容。
-p
对接下来的args进行历史替换,在标准输出上显示结果。不会将结果存入历史列表。每个arg都必须被引用,来禁止普通的历史展开。
-s
将args作为单独的条目保存到历史列表中。在args被添加到历史列表之前历史列表的最后一个命令被删除。
如果变量HISTTIMEFORMAT被设置,与每行历史条目相关的时间戳信息会被写到历史文件中,并使用历史注释标识符进行标记。在读取历史文件时,以历史注释标识符开始的后面直接跟数字的行被当作前面历史行的时间戳来解释。返回值为0,除非遇到了无效的选项,或者在读或写历史文件时发生错误,或者在-d的参数中给出了无效的offset,或者对-p的后续参数进行历史展开失败。
jobs [-lnprs] [ jobspec ... ]
jobs -x command [ args ... ]
第一种形式用来列出正在运行的作业。选项具有下列意义:
-l
在普通信息之外,列出进程ID。
-n
只显示从上次用户得知它们的状态之后,状态发生改变的作业的信息。
-p
只列出作业的进程组leader的进程ID。
-r
限制只输出正在运行的作业。
-s
限制只输出停止的作业。
如果给出了jobspec,输出仅限于此作业的信息。返回值为0,除非遇到了无效选项或提供了无效的jobspec。
如果提供了-x选项,作业jobs将用相应的进程组ID替换command或args中所有的jobspec,执行command,传递参数args给它并返回它的退出状态。
kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
kill -l [sigspec | exit_status]
向以pid或jobspec为名的进程发送名为sigspec或signum的信号。sigspec要么是一个大小写不敏感的类似SIGKILL的信号名称要么是一个信号编号;signum是一个信号编号。如果sigspec不存在,则SIGTERM被赋值。-l选项列表信号名称。如果在给出-l选项时提供了任何参数,对应参数的信号名称也会被列出,并且返回状态为0。如果sigspec是一个信号名称,那么可以有,也可以没有SIG前缀。如果没有给出sigspec,那么假设是SIGTERM。-l的exit_status参数是一个指定的数字。该数字要么是一个信号编号要么是被信号终止的进程的退出状态值。如果kill至少成功发送了一个信号则返回真;如果发生了错误或遇到了无效的选项,则返回假。
let arg [arg ...]
每个arg都是用于计算的算术表达式。如果最后一个arg计算值为0,let返回1;否则返回0。
local [option] [name[=value] ...]
对每个参数,local命令将创建一个名为name的局部变量并为之赋予值value。option可以是任何declare接受的选项。当local在函数内部使用时,它使得变量name作用范围局限于函数和它的子进程。没有操作数时,local将局部变量的列表写到标准输出。不在函数内部使用local会导致出错。其返回状态为0,除非在函数之外使用了local,或者指定了一个无效的name,或者name是一个只读的变量。
logout 退出登录shell。
mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
将标准输入的行读取到索引数组变量array中,如果提供了-u选项,也可以从文件描述符fd中读取。变量MAPFILE时默认的数组。如果提供了选项,有下列含义:
-n
只是复制count行。如果count为0,则赋值所有行。
-0
在索引的origin处开始为数组赋值。默认的索引号是0。
-s
丢弃读到的第一个count行。
-t
从每个被读的行中删除尾部的换行符。
-u
从文件描述符fd中读取行而不是从标准输入
-c
在每次调用callback期间为读到的行指定一个数字编号。
-C
-c选项指定的量子,每次量子行被读取时对callback求值。
如果-C选择被指定但是没有指定-c选项,默认的量子是5000。在callback被计算求值时,它提供了下一个被赋值的数组元素的索引,并且将赋值给某元素的行作为额外参数使用。在行被读取之后数组元素被赋值之前实现对callback求值。
如果没有提供一个明确的origin,mapfile命令会在赋值之前清除array。
mapfile返回成功除非提供了一个无效的选项或选项参数,array无效或未被赋值,或者如果array不是一个索引数组。
popd [-n] [+n] [-n]
从目录栈中删除条目。没有参数的话,从栈中删除顶层目录,执行cd切换到新的顶层目录。如果给出了参数,有下列的含义:
-n
在从目录栈中移除目录时,抑制目录的普通改变,因此只有栈是可被操纵的。
+n
删除由dirs显示出的列表中从左数第n个条目(从0算起)。例如:'popd +0'删除第一个目录,'popd +1'第二个。
-n
删除由dirs显示出的列表中从右数第n个条目(从0算起)。例如:'popd -0'删除最后一个目录,'popd -1'删除倒数第二个。
如果命令popd成功,也还要执行一个dirs,其返回值为0。如果遇到一个无效选项,或者目录栈为空,或者指定了一个栈中不存在的目录条目,或者目录改变失败,则popd返回假。
printf format [arguments]
在format控制下将格式化的arguments写到标准输出。-v选项使得输出被赋值给变量var而不是被显示在标准输出上。
format是一个包含三种类型的对象的字符串:被简单地复制到标准输出的纯字符,被转换并复制到标准输出的转义字符,使得后面连续的argument被一一显示出来的格式说明。在标准的printf(1)格式说明之外,printf解释下列扩展:
%b
使得printf在相应arguments中展开反斜杠转义序列(除非使用\c结束输出,在\',\"和\?中的反斜线不会被删除,使用\0开始的八进制逃逸符可能最多4个数字。)
%q
使得printf将相应的argument以一种可以重用为shell输入的格式输出。
%(datefmt)T
使得printf输出由使用datefmt作为strftime(3)的格式字符串而产生的日期-时间字符串。相应argument是一个代表了从纪元开始的秒数的整数。有两个特定的参数值可以使用:-1代表当前时间,而-2代表shell被调用的时间。
非字符串参数的格式说明符被当作C常量,除非允许前导一个加号或者是减号,并且如果前导字符是一个单引号或双引号,其值就是其后相邻字符的ASCII编码值。
format在需要时被重用以处理所有的arguments。如果format需要的arguments比所提供的更多,额外的格式说明会被适当地视为已经提供了的0值或空字符串。成功的话返回值是0,失败则是非0值。
pushd [-n] [dir]
pushd [-n] [+n] [-n]
将目录添加到目录栈顶,或者滚动栈中的内容,使当前工作目录成为目录新的栈顶。没有参数时,交换顶部两个目录,除非目录栈为空,返回0。如果提供了参数,它们有如下含义:
-n(选项)
在向栈中添加目录时阻止目录的正常改变,这时只对栈进行操作。
+n
滚动栈中内容,使得第n个(由dirs显示的列表中从左开始以0为起始值)目录处于栈顶。
-n
轮换栈中内容,使得第n个(由dirs显示的列表中从右开始以0为起始值)目录处于栈顶。
dir
添加dir到栈顶,使得它成为新的当前工作目录。
即使命令pushd成功,也要执行dirs。如果使用第一种形式,pushd返回0除非cd到dir失败了。使用第二种形式,pushd返回0,除非目录栈为空,或者指定了一个不存在的目录栈元素,或者目录改变成指定的新的当前目录失败。
0,除非目录栈为空,指定了目录栈中不存在的元素,或者 切换到指定的新的当前目录失败。
pwd [-LP]
显示当前工作目录的绝对路径名。如果提供了-P选项,或者内置命令set的-o physical选项被启用的话,显示出的路径名中不会包含符号链接。如果使用了-L选项,显示出的路径中可以包含符号链接。返回状态为0,除非在读取当前目录名时出错或提供了无效的选项。
read [-ers] [-u fd] [-t timeout] [-a aname] [-p prompt] [-n nchars] [-d delim] [name ...]
从标准输入读入一行,或从作为-u选项的参数所提供的文件描述符fd中读取,第一个词被赋值给第一个 name, 第二个词被赋予第二个 name, 以此类推,多余的词和其间的分隔符被赋予最后一个name。如果从输入流读入的词数比名称数少,剩余的名称被赋予空值。IFS中的字符被用来将行拆分成字。反斜杠字符被用于删除读取的下一字符的特殊含义,以及续行。如果给出了选项,将包含下列含义:
-a aname
将words赋值给数组变量aname连续的下标,从0开始。在对其赋新值之前,aname被未定义的。其他name参数被忽略。
-d delim
delim的第一个字符被用于结束输入行,而不是换行符。
-e
如果标准输入来自于终端,将使用行编辑功能来获得输入行。行编辑功能使用当前的编辑设定(如果行编辑在此之前是非活动的,则使用默认值)。
-i text
如果使用行编辑功能进行行的读取,text在编辑开始之前就将被放置到编辑缓冲区中。
-n nchars
read读入nchars个字符后返回,而不是一直等到输入一整行为止,但是如果在分隔符之前的内容少于nchars数量的字符,则以分隔符为主。
-N nchars
read读入nchars个字符后返回,而不是一直等到输入一整行为止,除非遇到EOF或read超时。在输入中遇到分隔符也不会做特殊处理并且直到nchars个字符串被读出才返回。
-p prompt
在尝试读取任何输入之前,在标准错误显示提示,末尾没有换行符。提示只有在输入来自终端时才会显示。
-r
反斜杠不作为转义字符。反斜杠被认为行的一部分。特别是反斜杠-换行符组合不再作为续行。
-s
安静模式。如果输入来自终端,字符将不会回显。
-t timeout
如果在timeout秒内没有读入完整的一行输入,将导致read超时并返回失败。timeout可以是一个跟在小数点之后带有小数部分的十进制数字。这个选项只有当read正在从终端读取输入信息时才有效。如果timeout是0,且如果在特殊文件描述符上的输入是可用的,read返回成功,否则返回失败。如果timeout溢出,退出状态是一个大于等于128的整数。
-u fd
从文件描述符fd中读取输入。
如果没有提供names,读取的一行将赋值给变量REPLY。返回值是0,除非遇到了EOF,read超时,或者给-u选项提供了一个无效的文件描述符作为参数。
readonly [-aAf] [-p] [name[=word] ...]
给出的name将被标记为只读的;这些names的值不能被后来的赋值语句改变。如果提供了-f选项,names对应的函数也被标记。-a选项限制变量只能是索引数组;-A选项限制变量为关联数组,如果这两个选项都提供出来了,-A选项的优先级更高。如果没有给出name参数,或者如果提供了-p选项,将显示所有只读名称的列表。其他的选项可以可用来限制输出到只读名称集合的子集。-p选项使得输出以一种可以被重新用作输入的格式显示。如果变量名后面紧跟着"=word",则该变量的值就会被设置为"word"。返回值是0,除非遇到了无效的选项,names之一不是有效的shell变量名,或选项-f中给出的name不是一个函数。
return [n]
使得一个函数以指定返回值n退出。如果忽略了n,返回状态是函数体中执行的最后一个命令的退出状态。如果在函数外使用,但是是在一个通过.(source)命令执行的脚本时,它使得shell中止执行脚本,返回n或脚本中执行的最后一个命令的退出状态。如果在函数外使用,并且不是通过.命令执行,返回状态为假。任何用RETURN捕捉器有关联的命令都在恢复执行之前在函数和脚本之后被执行。
set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]
不带选项时,每个shell变量的名称和值将以可以重用为输入的格式显示,用于设置或重置当前设置的变量。只读变量无法重置。在POSIX模式中,只显示shell变量。输出根据当前语言环境进行排序。在指定了选项时,它们设置或撤销了shell的属性。处理完选项之后剩余的任何参数都被当作位置参数的值并赋值,分别赋予$1, $2, ... $n. 如果提供了选项,那么具有以下含义:
-a
自动标记那些为了导出到随后命令的环境而被修改或被创建变量和函数。
-b
立即报告被终止的后台作业状态,而不是在下次主提示符前报告。只有在启用作业控制时才有效。
-e
如果是一个管道(被当做一个单独的简单命令),一个被封闭在括号中的子shell命令,或者作为由括号来封闭的命令列表的一部分而被执行的命令之一,立即以非0状态退出。如果失败是紧随着一个while或until关键字的命一部分令列表,跟在if或elif保留字后面的一部分测试,在&&或||列表中除了跟在随后面的&&或||后面的所有被执行的一部分命令,任何在管道中但非最后一个命令,或者如果命令的返回值被"!"取反,shell不退出。如果设置了关于ERR的捕获器,其在shell退出之前被执行。这个选项接受shell环境变量以及每个子shell单独的环境变量,并可能导致在子shell中执行所有命令之前退出子shell。
-f
禁止路径名展开。
-h
在为了执行命令而进行查找时,记住它们的位置。这是默认启用的。
-k
所有以赋值语句形式出现的参数都被放置在命令执行的环境中,不仅仅是前面的那些命令名。
-m
监视模式。作业控制被启用。这个选项在支持它的系统上对交互式shell来说默认是开启的。后台进程在单独的进程组中运行,结束时将显示出包含它们退出状态的一行信息。
-n
读取命令,但不执行他们。这可以用在检查shell脚本的语法错误。交互shell中它被忽略。
-o option-name
option-name可以是如下之一:
allexport
与-a相同。
braceexpand
与-B相同。
emacs
使用emacs风格的命令行编辑界面。除非shell以--noediting选项启动,否则这个选项在交互shell中默认启用。这也会影响用于read -e的编辑界面。
errexit
与-e相同。
hashall
与-h相同。
histexpand
与-H相同。
history
开启命令历史,这个选项在交互shell中默认启用。
ignoreeof
它的效果是好像已经执行了shell命令'IGNOREEOF=10'一样
keyword
与-k相同。
monitor
与-m相同。
noclobber
与-C相同。
noexec
与-n相同。
noglob
与-f相同。
nolog
当前被忽略。
notify
与-b相同。
nounset
与-u相同。
onecmd
与-t相同。
physical
与-P相同。
pipefail
如果设置了此项,管道的返回值就是最后(最右侧)命令的退出值,为非0状态,或者如果所有管道中的命令都成功退出的话,返回值为0。这个选项默认是禁用的。
posix
改变默认操作不同于POSIX标准的bash的行为以匹配标准(posix mode)
privileged
与-p相同。
verbose
与-v相同。
vi
使用vi风格的命令行编辑界面。这也会影响用于read -e的编辑界面。
xtrace
与-x相同。
如果提供了不带option-name的-o选项,当前选项的值将被显示出来。如果给出了不带option-name的+o选项,将在标准输出显示一系列可以重建当前选项设定的set命令。
-p
打开privileged模式(特权模式)。在这个模式中,不会处理$ENV和$BASH_ENV文件,shell函数不会从环境中继承,如果变量SHELLOPTS,BASHOPTS,CDPATH和GLOBIGNORE出现在环境变量中,则他们均被忽略。如果shell是用不等于真实用户(组)的ID的有效用户(组)的ID启动的,并且提供了-p选项,这些行动将被采用并且有效用户ID会被设置为真实用户ID。如果启动时给出了-p选项,有效用户ID不会被重置。将这个选项关闭会导致有效用户和组的ID被设置为真实用户和组的ID。
-t
读取并执行一个命令之后退出。
-u
在进行参数展开时,将除了特殊参数"@"和"*"之外的未定义的变量和参数视为错误。如果试图展开未定义的变量或参数,shell将输出一条错误消息,并且如果是非交互的shell,shell将以非零值退出。
-v
在读取输入的同时显示出来。
-x
展开每个简单命令,for命令,case命令,select命令或算术for命令之后,显示PS4的展开值,接着显示命令和它展开后的参数或者相关字的列表。
-B
shell执行花括号展开。
-C
如果设置的话, bash使用重定向操作数>,>&和<>时,不会覆盖已存在的文件。可以使用重定向操作数>|代替>来创建输出文件,从而绕过这个限制。
-H
允许!风格的历史替换。在交互shell中这个选项是默认启用的。
-P
如果设置的话,shell在执行像改变当前工作目录的cd命令时,不会跟随符号连接。它将使用物理的目录结构来代替。默认情况下,bash在执行改变当前目录的命令时跟随路径的逻辑链。
-T
如果设置的话,所有关于DEBUG和RETURN的捕获器都被shell函数,命令替换和在子shell环境中执行的命令所禁用。而正常的情况下,DEBUG和RETURN捕获器是不会被禁用的。
--
如果这个选项没有参数,则取消位置参数的定义。否则,位置参数将设置为args,即使它们以- 开始。
-
选项结束的信号,使得所有剩余的args被赋值给位置参数。-x和-v选项被关闭。如果没有args,位置参数将不会改变。
这些选项除非另外说明,否则默认都是关闭的。使用+而不是-可以使这些选项被关闭。这些选项可以被当作参数指定给shell的调用。当前的选项集合可以从$-中找到。返回值总是真,除非遇到了无效的选项。
shift [n]
从n+1 ...开始的位置参数被重命名为$1 ...。被数字$#向下直到$#-n+1所代表的参数被取消定义。n必须是小于或等于$#的非负整数。如果n是0,参数不会被改变。如果没有给出n,就假定它是1。如果n比$#大,位置参数不会改变。如果n比$#大或小于0,返回值大于0;否则返回值为0。
shopt [-pqsu] [-o] [optname ...]
对于控制可选shell行为的变量,切换它们的值。没有选项或者有-p选项时,所有可设置的选项列表将被显示出来,以及它们是否已经设置的标记。-p使得输出以一种可以被重用为输入的形式显示。其他选项有如下含义:
-s
允许(设置)每个optname。
-u
禁止(取消)每个optname。
-q
禁止通常的输出(安静模式);返回状态表示optname是否被设置。如果对-q给出了多个optname参数,且如果所有optname都是开启的,返回状态就是0;否则返回非零值。
-o
限制optname的值为内置命令set的-o选项定义的值。
如果使用-s或-u时没有给出optname参数,显示将被限于那些被设置或被取消设置的选项。除非另外说明,shopt选项默认被禁止(取消)。
如果所有optname都被启用,在列出选项时的返回状态为0,否则是返回状态为非零值。当设置或取消选项时,除非optname是非法的shell选项,赋值返回值为0。
shopt 选项的列表是:
autocd
如果设置的话,一个命令名,它是一个目录的名称,它被执行,好像它是cd命令的参数。此选项只能被交互式shell使用。
cdable_vars
如果设置的话,内置命令cd的一个参数不是目录,该参数被假定为值是能够改变到的目录的变量的名称。
cdspell
如果设置的话,cd命令中目录的细微拼写错误能够得以纠正。检查的错误包括字符错位,缺字符,重复输入同一字符。如果找到了正确的值,将显示正确的文件名,命令将继续继续。这个选项只能在交互 shell 中使用。
checkhash
如果设置的话,bash在尝试执行命令前检测hash表中的命令是否存在。如果一个被hash的命令不再存在,将进行正常的路径查找。
checkjobs
如果设置的话,bash在退出交互式shell之前,列表显示所有已经停止的和正在运行的作业的状态。如果所有作业都在运行,将导致退出操作被推迟,直到尝试没有任何命令在其中运行的那一秒为止。如果所有作业都已经停止shell也总是延缓退出。
checkwinsize
如果设置的话,bash在每条命令执行后检测窗口大小,如果需要,就更新LINES和COLUMNS的值。
cmdhist
如果设置的话,bash试着将一个多行命令的所有行放到同一个历史条目中。这样使得多行命令可以容易地重新修改。
compat31
如果设置的话,bash改变其行为到3.1版,相对于引用参数的[[ conditional command's =~ operator
compat32
如果设置的话,bash改变其行为到3.2版,相对于在使用[[ conditional command's < and > operator时的特定环境的字符串比较。在bash-4.1之前的bash版本使用ASCII排序规则和strcmp(3);bash-4.1及后续版本使用当前语言环境的排序顺序和strcoll(3)。
compat40
如果设置的话,bash改变其行为到4.0版,相对于在使用[[ conditional command's < and > operator时的特定环境的字符串比较,以及打断命令列表的效果。
compat41
如果设置的话,当bash在posix模式中,将双引号参数展开中的单引号视为特殊字符。单引号必须匹配(偶数个)并且在两个单引号之间的字符都视作被引用。这是贯穿4.1版本的posix模式的行为。像以前版本中的默认的bash行为任然保留。
direxpand
如果设置的话,在执行文件名补全时,bash使用字展开的结果替换目录名。这改变了行编辑功能编辑缓冲区的内容。如果没有设置,bash尝试去保护用户输入的内容。
dirspell
如果设置的话,如果初始提供的目录名不存在,bash在目录名的字补全期间尝试拼写纠正。
dotglob
如果设置的话,bash会把以'.'开始的文件名包含在路径名展开的结果中。
execfail
如果设置的话,如果非交互的shell不能执行作为参数提供给内置命令exec的文件的话,将不会退出。交互的shell在exec失败时不会退出。
expand_aliases
如果设置的话,别名被展开。这个选项在交互shell中是默认启用的。
extdebug
如果设置的话,有意地使用调试器的行为将被开启:
1.内置命令declare的-F选项将源文件名和对应于每个提供的函数名的行数作为参数予以显示
2.如果通过DEBUG捕获器运行的命令返回一个非0值,下一个命令就会跳过并且不会执行。
3.如果通过DEBUG捕获器运行的命令返回的值为2,并且shell正在一个子例程(由内置命令.或source执行的shell函数或shell脚本)中被执行,和调用return是类似的。
4.BASH_ARGC和BASH_ARGV像前面描述过的那样被更新。
5.函数跟踪被启用:命令替换,shell函数和使用继承的DEBUG及REUTRN捕获器的子shell调用。
6.错误跟踪被启用:命令替换,shell函数和使用继承的ERR捕获器的子shell调用。
extglob
如果设置的话,将允许上面Pathname Expansion中提到的展开模式来匹配特性。
extquote
如果设置的话,$'string'和$"string"引用在${parameter}双引号封闭展开中被执行。这个选项默认开启。
failglob
如果设置的话,在路径名展开期间文件名的失败匹配的模式将导致展开错误。
force_fignore
如果设置的话,由shell变量FIGNORE指定的后缀在执行字补全时使得字被忽略,即使被忽略的字是最有可能的补全。此选项默认开启。
globstar
如果设置的话,使用在路径名展开上下文中的**会匹配所有的文件以及0个或多个目录和子目录。如果模式后面紧跟着"/"的话,只有目录和子目录被匹配。
gnu_errfmt
如果设置的话,shell以标准的GNU错误信息格式输出错误信息。
histappend
如果设置的话,在shell退出时,历史列表将追加到以HISTFILE的值为名的文件之后,而不是覆盖文件。
histreedit
如果设置的话,并且正在使用行编辑功能,给定的用户有机会重新编辑失败的历史替换。
histverify
如果设置的话,并且正在使用行编辑功能,历史替换的结果不是立即被传递给shell分析器。取而代之的,结果行被载入行编辑功能的编辑缓冲区,运行进一步修改。
hostcomplete
如果设置的话,并且正在使用行编辑功能,当一个字包含了一个正在被补全的"@"符号时,bash会尝试执行主机名补全。这是默认开启的。
huponexit
如果设置的话,在交互的登录shell退出时bash将向所有作业发出SIGHUP信号。
interactive_comments
如果设置的话,在交互shell中遇到以#开头的字时,将使得这个词和该行中剩余的所有字符都被忽略。该选项默认是开启的。
lastpipe
如果设置的话,并且作业控制器是非活动的,shell在当前shell环境的后台运行管道中的最后的非执行命令。
lithist
如果设置的话,并且cmdhist选项已被启用,多行的命令在保存到历史中时将嵌入换行符,而不是在可能的地方使用分号。
login_shell
如果shell作为登录shell启动,将设置这个选项。该值不能改变。
mailwarn
如果设置的话,并且bash正在检测上次检测以来被存取过的邮件,将显示'The mail in mailfile has been read'。
no_empty_cmd_completion
如果设置的话,并且正在使用行编辑功能,在当一个空命令行上尝试补全时,bash不会试图去查找PATH变量以获得可能的补全。
nocaseglob
如果设置的话,在进行路径名展开时,bash使用大小写不敏感的方式匹配文件名。
nocasematch
如果设置的话,在执行case或[[条件命令匹配时,bash使用大小写不敏感的方式匹配模式。
nullglob
如果设置的话,bash将允许未匹配任何文件的模式展开为空字符串而不是它们自身。
progcomp
如果设置的话,将启用可编程补全功能。这个选项是默认启用的。
promptvars
如果设置的话,提示字符串在经过上面PROMPTING中描述的展开之后,还要经过参数展开,命令替换,算术展开和去除引用。这个选项是默认启用的。
restricted_shell
如果shell是以受限模式启用的,则它将设置这个选项。这个值不能修改。在启动文件被执行时,它也不会被重置,使得启动文件可以得知shell是否是受限的。
shift_verbose
如果设置的话,内置命令shift在偏移量超过位置参数的个数时输出一条错误消息。
sourcepath
如果设置的话,内置命令source(.)使用PATH变量中的值来查找包含作为参数提供的文件。该选项默认是启用的。
xpg_echo
如果设置的话,内置命令echo默认展开反斜杠转义序列。
suspend [-f]
挂起此shell的执行,直到收到一个SIGCONT信号为止。当挂起的shell是一个后台进程,它可以通过fg命令重启。suspend命令不能挂起登录式shell。然而,在指定-f选项时,suspend命令也可以挂起登录式shell。除非shell是登录shell并且没有指定-f选项,或者作业控制器没有启用,否则返回值是0。
test expr
[ expr ]
返回0或1的状态值,根据条件表达式expr的求值而定。每个操作符和操作数都必须是一个单独的参数。test不接受任何选项,也不接受并且忽略--参数作为选项的结束。
表达式可以混合使用下列操作符,以优先级的降序列出。根据参数的数字求值;如下。当参数的数量为5个或更多的时候,才会使用操作符优先级。
! expr
如果expr为假,则表达式值为真。
( expr )
返回expr的值。括号可以用来超越操作符的一般优先级。
expr1 -a expr2
如果expr1和expr2都为真,则表达式值为真。
expr1 -o expr2
如果expr1或expr2为真,则表达式值为真。
test 和 [ 使用基于参数个数的一系列规则,对条件表达式进行求值。
0个arguments
表达式为假。
1个argument
表达式为真,当且仅当参数非空。
2个arguments
如果第一个参数是!,当且仅当第二个参数为空,表达式为真。如果第一个参数是上面CONDITIONAL EXPRESSIONS列举的单目条件运算符之一,当且仅当单目测试为真时,表达式为真。如果第一个参数不是有效的单目条件操作符,表达式为假。
3个arguments
接下来的条件按列举的顺序被接收。如果第二个参数是上面CONDITIONAL EXPRESSIONS列举的二进制条件操作符,表达式的结果就是使用第一个参数和第三个参数作为操作数的二进制测试的结果。当由三个参数的时候,-a和-o操作符被认为时二进制操作符。如果第一个参数是!,值为使用第二个参数和第三个参数进行双参数测试的结果取反。如果第一个参数是和第三个参数都是确切的,结果是第二个参数的但参数测试的结果。否则,表达式为假。
4个arguments
如果第一个参数是!,结果是由剩余参数组成的三参数表达式结果取反。否则,表达式被根据上面列出的优先级规则解释并计算求值。
5个或更多 arguments
表达式被根据上面列出的优先级规则解释并执行。
当使用test或[的时候,<和>操作符使用ASCII顺序字典排序。
times
对shell以及shell运行的进程,显示累计的用户和系统时间。返回状态是0。
trap [-lp] [arg] [sigspec ...]
当shell收到sigspec信号时,命令arg将被读取并执行。如果缺失了arg(有sigspec信号)或者给出的是-,每个指定的信号重置为它们的初始值(刚刚进入shell时它们所具有的值)。如果arg是空字符串,sigspec指定的信号被shell和它调用的命令忽略。如果arg不存在,并且提供了-p选项,那么与每个sigspec相关联的trap命令将被显示出来。如果没有提供任何参数,或只提供了-p选项,trap显示每个信号相关的命令列表。-l选项使得shell显示信号名称和其相应数字的列表。每个sigspec可以是定义在<singal.h>中的信号名也可以是信号编号。信号名时大小写不敏感的,SIG前缀时可选的。
如果sigspec时EXIT(0)
定义的信号名,或是一个信号编号。如果sigspec是EXIT(0),命令arg在shell退出时被执行。如果sigspec是DEBUG,命令arg将在每个简单命令之前被执行,for命令,case命令,select命令,每个算术for命令以及在shell函数中第一个被执行的命令之前的命令。指的是内置命令shopt的extdebug选项的DEBUG捕获器的效果的细节描述。如果sigspec时RETURN,命令arg在每次shell函数或脚本使用内置命令source或.完成执行时被执行。
如果sigspec是ERR,命令arg将在任何命令以非零值退出时执行,服从下列条件。如果失败的命令是紧跟在until或while关键字命令列表的一部分,在if语句中测试命令的一部分,在&&或||序列中执行的命令中的一部分,或者命令的返回值是通过!转化而来的,ERR捕获器将不会执行。这些就是被errexit选项所遵守的相同的条件。
shell忽略的信号不能被捕捉,重置或列表。在子进程中,被捕捉的不能被忽略的信号在子进程或子进程环境创建时被重置为初始值。如果sigspec时无效的,trap返回值为假;否则返回值为真。
type [-aftpP] name [name ...]
没有选项时,代表如果将name当作一个命令名来使用,每个name将如何被解释。如果使用了-t选项,type输出一个字符串,内容是如下之一:alias,keyword,function,builtin或file。如果没有找到name,那么不会输出任何东西,返回退出状态为假。如果使用了-p选项,如果name作为命令名,type要么返回将被执行的磁盘文件名;要么什么都不返回,即便是'type -t name'不会返回file。如果命令被hash缓存,-p选项和-P选项输出被缓存的值,不必是出现在PATH变量首位的文件。如果使用了-a选项,type输出所有包含可执行的名称的name的位置。这也包含别名和函数,当且仅当-p选项也没有使用的时候。当使用-a选项时,被hash的命令表也不会被查阅。-f选项限制shell函数的查找,就像使用内置命令command那样。如果找到了任何参数,type返回真,什么都没找到则返回假。
ulimit [-HSTabcdefilmnpqrstuvx [limit]]
对shell提供对可用的资源的控制权,并在允许这样的控制的系统上由它开启进程。选项-H和-S指定为所给资源设定的硬性和软性限额。一旦设定了硬性限额,通过非root用户不能增加其值;软性限额可以增加,直到与硬性限额相等。如果既没有给出-H也没有给出-S选项,将同时设置硬性和柔性限额。limit的值可以是一个指定资源单位中的数字,或者是特殊值hard,soft或unlimited之一,分别指的是当前硬性限额,当前软性限额和没有限额。如果忽略了limit,将输出当前对资源的软性限额值,除非给出了-H选项。当指定多于一个资源时,限额名称和单位将在值之前输出出来。其他选项按照如下意义解释即可:
-a
报告所有当前限额
-b
最大的套接字缓冲区大小
-c
core文件的最大值
-d
进程数据段的最大值
-e
处理优先级的最大值(nice值)
-f
由shell和其子shell创建的文件的最大值
-i
最大的绑定的信号的数字
-l
可以锁定的内存的最大值
-m
常驻内存的最大值
-n
打开的文件描述符最大个数(大多数系统不允许设置这个值)
-p
管道大小,以512字节的块为单位 (这个值可能不能设置)
-q
POSIX消息队列中的最大字节数
-s
栈的最大值
-t
以秒为单位的cpu时间总量的最大值
-u
用户可以运行的最大进程数
-v
对shell来说可用的虚拟内存总量的最大值,在某些系统上,也指子shell。
-x
最大文件锁数
-T
最大线程数
如果给出了limit,它将是指定资源的新限额值(-a选项只显示它们)。如果没有给出选项,则假设有-f选项。值是以1024字节来增长的,除非使用-t选项,可以使用秒来增长,或者使用-p选项,可以使用512字节的块来增长,并且-T,-b,-n以及-u选项,这些是不可调节的值。返回状态为0,除非给出了无效的选项或参数,或者在设置新的限额时发生了错误。在POSIX模式中,512字节的块被用于-c和-f选项。
umask [-p] [-S] [mode]
用户创建文件的掩码被设置为mode。如果mode以数字开始,它被当做一个八进制数来解释;否则被解释为类似于chmod(1)能接受的符号模式的掩码。如果忽略了mode,将输出当前掩码值。-S选项使得掩码以符号形式输出;默认输出是一个八进制数。如果提供了-p选项,并且忽略了mode,输出将是一种可以重用为输入的形式。如果成功改变了模式或者没有给出mode,返回状态值是0。其他情况返回假。
unalias [-a] [name ...]
从已定义的别名列表中删除name。如果提供了-a将删除所有别名定义。除非给出的name不是已定义的别名,返回值是真。
unset [-fv] [name ...]
将每个name对应的变量或函数删除。如果没有提供选项,或者给出了-v选项,每个name都代表着shell变量。只读的变量不能被取消定义。如果提供了-f选项,每个name都代表shell函数,而函数的定义将被删除。每个被取消定义的变量或函数都被从传递给后续命令的环境中删除。如果RANDOM,SECONDS,LINENO,HISTCMD,FUNCNAME,GROUPS或者DIRSTACK中的任何一个被取消定义,它们将丧失特殊的属性,即使它们后来被重新定义。退出状态是真,除非name不存在或是只读的。
wait [n]
等待每个被指定的进程,返回它的终止状态。每个n都可以是进程ID或一个作业规则;如果给出的是作业规则,将等待作业的管道中所有进程。如果没有给出n,将等待所有当前处于激活状态的子进程,并且返回状态是0。如果n指定了不存在的进程或作业,返回状态是127。否则,返回状态是所等待的最后一个进程或作业的退出状态。
翻译了bash-4.2.46-19版的帮助手册的内容,从中抽取出一些主要的部分跟大家分享,有不足和翻译不准确的地方,还请大家见谅,毕竟在下并不是专业的翻译人员。只是想利用这些东西让所有阅读者能够更多的了解到bash及其所支持的用法。当然如果您已经选择使用了zsh(所谓的终极shell)的话,可以忽略此文。谢谢。