8.7 可编程完成的内置程序
有三个内置的命令可以用来操作可编程的完成工具:一个是指定如何完成某一特定命令的参数,另一个是修改正在发生的完成情况。
compgen
¶compgen [option] [word]
根据options为word生成可能的完成匹配,可以是
complete
内置接受的任何选项,但-p和-r除外,并将匹配结果写入标准输出。 当使用-F或-C选项时,由可编程完成工具设置的各种shell变量虽然可用,但将没有有用的值。匹配将以同样的方式产生,就像可编程完成代码直接从具有相同标志的完成规范中产生一样。 如果指定了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可以是以下之一:comp-option控制compspec’行为的几个方面,而不是简单地生成补语。
bashdefault
如果compspec没有产生任何匹配,则执行其余的默认Bash补全程序。
default
如果编译器没有生成匹配的文件,则使用Readline’默认的文件名补全。
dirnames
如果compspec没有生成匹配的目录名,则执行目录名补全。
filenames
告诉Readline编译器会生成文件名,所以它可以执行任何针对文件名的处理(比如给目录名添加斜线,引用特殊字符,或者抑制尾部的空格)。 这个选项旨在与用-F指定的shell函数一起使用。
noquote
告诉Readline,如果完成的字是文件名,就不要引证它们(引证文件名是默认的)。
nosort
告诉Readline不要按字母顺序对可能完成的任务列表进行排序。
nospace
告诉Readline不要在行末完成的单词上附加空格(默认值)。
plusdirs
在产生由compspec定义的任何匹配后,尝试完成目录名称,并将任何匹配结果添加到其他操作的结果中。
-A action
action可以是下列之一,以生成一个可能的完成度的列表。
alias
别名的名称。也可以指定为-a。
arrayvar
阵列变量的名称。
binding
读行键的绑定名称(见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
主机名,取自
HOSTFILE
shell变量所指定的文件(见5.2 Bash 变量)。job
工作名称,如果工作控制被激活。也可以指定为-j。
keyword
外壳保留字。也可以指定为-k。
running
正在运行的作业的名称,如果作业控制处于活动状态。
service
服务名称。也可指定为-s。
setopt
set
内建程序的-o选项的有效参数(见1 Set 内置程序)。shopt
由
shopt
内建程序接受的Shell选项名称(见4.2 Bash的内置命令)。signal
信号的名称。
stopped
如果工作控制处于活动状态,停止的工作的名称。
user
用户名称。也可指定为-u。
variable
所有shell变量的名称。也可以指定为-v。
-C command
command在子壳环境中执行,它的输出被用作可能的补全。 参数的传递与-F选项一样。
-F function
shell函数function在当前的shell环境中执行。 当它执行时,1美元是其参数被完成的命令名称,2美元是被完成的单词,3美元是被完成的单词前面的单词,如上所述(见可编程完成)。 当它完成时,可能的完成值从
COMPREPLY
数组变量的值中检索出来。-G globpat
文件名扩展模式globpat被扩展,以产生可能的补全。
-P prefix
prefix在所有其他选项被应用后,被添加在每个可能的完成度的开头。
-S suffix
suffix在所有其他选项被应用后,被附加到每个可能的完成度上。
-W wordlist
wordlist使用
IFS
特殊变量中的字符作为分隔符进行分割,并对每个结果词进行扩展。 可能的补全是结果列表中与被补全的单词相匹配的成员。-X filterpat
filterpat是一个用于文件名扩展的模式。 它被应用于由前面的选项和参数产生的可能的补全列表,每个与filterpat相匹配的补全都被从列表中删除。 在filterpat中领先的‘!’会否定该模式;在这种情况下,任何不匹配filterpat的补全都被删除了。
返回值为真,除非提供了无效的选项,提供了-p或-r以外的选项而没有name参数,试图为一个不存在规范的name删除完成规范,或在添加完成规范时发生错误。
compopt
¶compopt
[-o option] [-DEI] [+o option] [name]根据options修改每个name的完成选项,如果没有提供name,则修改当前执行的完成选项。 如果没有提供option,则显示每个name的完成选项或当前的完成。option的可能值是那些对上述
complete
内置程序有效的值。 -D选项表示其他提供的选项应适用于“默认”命令完成;也就是说,在一个先前没有定义完成的命令上尝试完成。选项-E表示其他提供的选项应适用于“空”命令的完成;即在空行上尝试完成。 选项-I表示其他提供的选项应适用于在行上最初的非分配字上完成,或在命令分隔符(如‘;’或‘|’这通常是命令名完成。如果提供了多个选项,则-D选项优先于-E,两者都优先于-I。
返回值为真,除非提供了一个无效的选项,试图为一个不存在完成规范的name修改选项,或者发生了输出错误。