bash - 如何完成具有多个参数/选项的 bash 函数?
问题描述
我为命令定义了一个函数别名:aa
我定义了一个_complete_aa
函数,该函数用作aa
命令的建议complete -F _complete_aa aa
(参见下面的代码)
aa(){
anothercommand ${@}
}
_complete_aa(){
COMPREPLY=($(compgen -W "clean build start" "${COMP_WORDS[1]}"))
}
complete -F _complete_aa aa
当我使用该功能时,我有一个意外的行为:
当我键入aa cle
并按TAB
提示正确完成我的输入aa clean
但是,当我键入aa clean bui
并按下TAB
时,提示符会将我的输入完成为aa clean clean
,而我希望它应该变为aa clean build
。
我想我的错误出在下面的补全函数中,它不关心当前完成的单词的索引。
_complete_aa(){
COMPREPLY=($(compgen -W "clean build start" "${COMP_WORDS[1]}"))
}
问题:我应该如何更改函数的主体,以便为我输入的每个新选项/参数_complete_aa
完成当前单词?clean build start
解决方案
COMP_WORDS
使用当前单词索引的索引。
aa() {
anothercommand "$@"
}
_complete_aa() {
COMPREPLY=($(compgen -W "clean build start" "${COMP_WORDS[$COMP_CWORD]}"))
}
complete -F _complete_aa aa
the"${COMP_WORDS[1]}"
始终是命令后的第一个单词。