我有一个脚本需要作为参数的命令名称和该命令的参数。
所以我想写一个完成函数来完成命令的名称,并完成该命令的参数。
所以我可以像这样完成命令的名称
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脚本专家,所以我不知道从哪里开始搜索解决方案。
答案 0 :(得分:1)
您的要求类似于exec
或time
或xargs
的命令完成情况。这些命令也需要一个命令&该命令的参数作为完成选项。
检查exec
的bash_completion选项:
$ complete | grep exec
complete -F _command exec
您可以重复使用与完成功能相同的函数_command
..
用法:
complete -F _command your-script.sh