如何用多个parameters/options完成一个bash的功能?
How to complete a bash function with multiple parameters/options?
我为命令定义了一个函数别名:aa
并且我定义了一个 _complete_aa
函数,该函数通过 complete -F _complete_aa 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
函数的主体,以便在我输入的每个新 option/parameter 中将当前单词完成为 clean build start
?
索引 COMP_WORDS
与当前单词索引。
aa() {
anothercommand "$@"
}
_complete_aa() {
COMPREPLY=($(compgen -W "clean build start" "${COMP_WORDS[$COMP_CWORD]}"))
}
complete -F _complete_aa aa
"${COMP_WORDS[1]}"
始终是命令后的第一个词。
完成函数获取位置参数,其中</code>是"word being completed",所以你可以这样做:</p>
<pre><code>_complete_aa(){
COMPREPLY=($(compgen -W "clean build start" ""))
}
如果您的补全真的只是给定单词的选择,您可以改用更简单的 -W
补全:
complete -W 'clean build start' aa
我为命令定义了一个函数别名:aa
并且我定义了一个 _complete_aa
函数,该函数通过 complete -F _complete_aa 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
函数的主体,以便在我输入的每个新 option/parameter 中将当前单词完成为 clean build start
?
索引 COMP_WORDS
与当前单词索引。
aa() {
anothercommand "$@"
}
_complete_aa() {
COMPREPLY=($(compgen -W "clean build start" "${COMP_WORDS[$COMP_CWORD]}"))
}
complete -F _complete_aa aa
"${COMP_WORDS[1]}"
始终是命令后的第一个词。
完成函数获取位置参数,其中</code>是"word being completed",所以你可以这样做:</p>
<pre><code>_complete_aa(){
COMPREPLY=($(compgen -W "clean build start" ""))
}
如果您的补全真的只是给定单词的选择,您可以改用更简单的 -W
补全:
complete -W 'clean build start' aa