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 脚本专家,所以我只是不知道从哪里开始搜索解决方案。
您的要求类似于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)