Bash从另一个完成完成

时间:2015-03-24 11:36:49

标签: bash tab-completion

我有一个脚本需要作为参数的命令名称和该命令的参数。

所以我想写一个完成函数来完成命令的名称,并完成该命令的参数。

所以我可以像这样完成命令的名称

if [[ "$COMP_CWORD" == 1 ]]; then
    COMPREPLY=( $( compgen -c ${COMP_WORDS[COMP_CWORD]} ))
else
    #Don't know what to write here
fi

因此,这将完成可用于运行的shell命令列表的第一个参数。在第二个和其他论点我需要完成 ${COMP_WORDS[COMP_CWORD]}命令。

我考虑过从COMP_WORDS删除第一个元素,将COMP_CWORD减少一个并调用函数_${COMP_WORDS[0]} 名称前缀为" _"对于命令,因为在许多示例中,完成命令的函数具有这样的名称,但是当我在bash中执行complete -p时,我发现许多命令都是使用具有不同名称的函数完成的。至于我,这样的解决方案看起来非常糟糕。

我不是一个bash脚本专家,所以我不知道从哪里开始搜索解决方案。

1 个答案:

答案 0 :(得分:1)

您的要求类似于exectimexargs的命令完成情况。这些命令也需要一个命令&该命令的参数作为完成选项。

检查exec的bash_completion选项:

$ complete | grep exec
complete -F _command exec

您可以重复使用与完成功能相同的函数_command ..

用法:

complete -F _command your-script.sh