来自另一个补全的 Bash 补全

Jus*_*ous 6 bash tab-completion

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

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

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

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

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

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

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

ani*_*ane 6

您的要求类似于execor timeor的命令完成xargs。这些命令还采用命令和该命令的参数作为完成选项。

检查 bash_completion 选项exec

$ complete -p exec
complete -F _command exec
Run Code Online (Sandbox Code Playgroud)

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

用法:

complete -F _command your-script.sh
Run Code Online (Sandbox Code Playgroud)