8.7 可编程补全内建命令(Programmable Completion Builtins)

三个内建命令可用于操纵可编程补全功能:一个是用来指定如何将特定命令的参数进行补全,其它两个用于当其发生时修改补全。

compgen

compgen [options] [word]

依据“options”为“word”产生可行补全匹配项,并且将匹配项输出到标准输出。选项是内建命令 complete 可接受的选项但不包括“-p”和“-r”。当使用“-F”或“-C”选项时,由可编程补全功能设置的多个变量可用时,将不具有有用的值。

其所产生的匹配项就像由可编程补全代码从带有相同标志的补全规范中直接产生的一样。如果指定了“word”,只会显示匹配到“word”的补全。

返回值为真,除非提供了一个无效的选项,或没有匹配项产生。

complete

complete [-abcdefgjksuv] [-o comp-option] [-DEI] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] name [name ...]

complete -pr [-DEI] [name ...]

指定每一个“name”参数是如何补全的。如果提供了“-p”选项,或如果没有选项给出,现有的补全规范会以可以重新作为输入的格式打印出来。“-r”选项用来移除每一个给出的“name”的补全规范,或如果没有给出“name”参数,则移除所有补全规范。“-D”选项表示将其它给出的选项和动作应用到“默认”命令补全上;也就是说,在事先没有定义补全规范的命令在进行补全尝试时会使用事先定义的补全。“-E”选项表示应该将其它给出的选项和动作应用到“空”命令补全上;也就是说,可在空行上尝试进行的补全。“-I”选项表示应该将其它选项和动作应用到行的初始非赋值单词的补全上,或命令分隔符(像,“;”或“|”)之后的通常是命令名的补全上。如果是同时提供了多个选项,“-D”选项的优先级高于“-E”,并且这两个选项高于“-I”。如果命令中出现了“-D”、“-E”或“-I”其中的某几个,则会忽略任何给出的“name”参数;补全只会应用到由选项指定的案例上。

在进行单词补全尝试时这些补全规范的应用过程描述可参见上节的描述(8.6《可编程补全》)。

如果指定了其它的选项,则具有下列含义。选项“-G”、“-W”和“-X”的参数(如果需要的话,还有“-P”和“-S”选项的)应该使用引号保护起来以防止在 complete 内建命令调用之前进行扩展操作。

-o comp-option

在初步产生补全之后,“comp-option”控制着compspec的行为方向。“comp-option”可以是下列之一:

bashdefault
    如果compspec没有产生匹配项,之后则执行默认Bash补全。

default
    如果compspec没有产生匹配项,则使用Readline的默认文件名补全。

dirnames
    如果compspec没有产生匹配项,则执行目录名补全。

filenames
    告诉Readline,compspec会产生文件名。因此其会执行特定的文件名处理(像在目录名后添加一个斜线,将特殊字符引起来,或抑制末尾空格)。该选项意图在由“-F”选项指定shell函数时使用。

noquote
    告诉Readline如果被补全单词是文件名的话,不要将它们引起来(默认时会将文件引起来)。

nosort
    告诉Readline不要将可行补全列表按字母顺序排序。

nospace
    告诉Readline单词补全后不要在行尾追加一个空格(默认会追加)。

plusdirs
    在由compspec定义产生的匹配项之后,会尝试进行目录名补全操作,并且将匹配项添加到其它动作所产生的结果上。

-A action

“action”可以是下列用于产生可行补全列表的选项之一:

alias
    别名名称。也可由“-a”选项指定。

arrayvar
    数组变量名。

binding
    Readline按键绑定名称(参见8.4《可绑定的Readline命令》)。

builtin
    shell内建命令名。可以由“-b”选项指定。

command
    命令名。也可由“-c”选项指定。

directory
    目录名。也可由“-d”选项指定。

disabled
    关闭的shell内建命令名。

enabled
    开启的shell内建命令名。

export
    已导出的shell变量名。也可由“-e”选项指定。

file
    文件名。也可由“-f”选项指定。

function
    shell函数名。

group
    组名。也可由“-g”选项指定。

helptopic
    由内建命令help可接受的帮助提示(参见4.2《Bash内建命令》)。

hostname
    主机名,由shell变量HOSTFILE所指定的文件中获得(参见5.2《Bash变量》)。

job
    作业名,前提是作业控制已激活。也可由“-j”选项指定。

keyword
    Shell保留字。也可由“-k”选项指定。

running
    正在运行的作业名,前提是作业控制已激活。

service
    服务名。也可由“-s”选项指定。

setopt
    内建命令set的“-o”选项可用的参数(参见4.3.1《内建命令set》)。

shopt
    由内建命令shopt可接受的Shell选项名(参见4.2《Bash内建命令》)。

signal
    信号名。

stopped
    已停止的作业名,前提是作业控制已激活。

user
    用户名。也可由“-u”选项指定。

variable
    所有shell变量名。也可由“-v”选项指定。

-C command

在子shell环境中执行的命令,其输出作为可行补全使用。

-F function

在当前shell环境中执行的shell函数“function”。当函数执行时,变量“$1”是被补全参数的命令名,变量“$2”是被补全的单词,变量“$3”是被补全单词前面(即右侧)的单词。详细描述可参见8.6《可编程补全》。当函数完成时,会从数组变量COMPREPLY中取回可行补全。

-G globpat

用于扩展生成可行补全的文件名扩展样式“globpat”。

-P prefix

在所有其它选项都应用完成之后,将“prefix”添加到每一个可行补全的开头。

-S suffix

在所有其它选项都应用完成之后,将“suffix”添加到每一个可行补全的末尾。

-W wordlist

使用特殊变量IFS中的字符将“wordlist”进行单词分割,并且扩展每一个结果单词。可行补全是结果列表中所有匹配到被补全单词的成员。

-X fileterpat

“filterpat”是作为文件名扩展所使用的样式。其应用于由先前选项和参数所产生的可行补全列表,并且每一个与“filterpat”匹配的补全将会从列表中移除。在“filterpat”前面加一个“!”代表样式取反;这样任何没有匹配到“filterpat”的补全会被移除。

该命令返回值为真。除非:提供了一个无效的选项;提供非“-p”或“-r”选项时未给出“name”参数;试图移除一个名为“name”的补全规范时,该规范不存在;或在添加一个补全规范时出现了错误。

compopt

compopt [-o option] [-DEI] [+o option] [name]

为每一个给出的名为“name”的补全,或如果没有给出“name”则为当前执行的补全,将补全选项修改为“option”所指定的选项。如果没有给出“option”,则显示每一个“name”的或当前补全的补全选项。“option”的可用值是上面描述的内建命令 complete 的有效值。“-D”选项表示的是其它给出的选项要应用到“default”命令补全上;也就是说,该补全尝试是为之前没有定义过补全的命令使用的。“-E”选项表示的是其它给出的选项要应用到“empty”命令补全上;也就是说,是在空行上尝试的补全。“-I”选项表示的是其它给出的选项应该应用到行中初始非赋值单词的补全上,或在命令分隔符,像“;”或“|”之后的补全上,一般是命令名补全。

如果多选项同时出现,“-D”选项比“-E”选项有更高的优先级,并且这两个选项的优先级都要比“-I”高。

该命令返回值为真。除非:提供了一个无效的选项;试图对参数“name”所指定的补全规范的选项修改时,其补全规范不存在;或出现一个输出错误。