经过数小时的搜索后,我最终编写了第一个stackoverflow问题。
我想为bash脚本创建一个完成函数,到目前为止一直很好;)。 此bash脚本调用具有自己的自动完成功能的其他可执行文件。
示例:
$ my_script foo par
# calls /usr/local/libexec/my_script/foo par
自动填充my_script的第一个参数(在本例中为“foo”)有效,因为可能的选项是“/ usr / local / libexec / my_script /”文件夹中的文件。 此文件夹中的每个程序都有自动完成工作,这是使用boost :: program_options的副产品。
我现在想要通过引用要调用的程序的自动完成来实现my_script的下一个参数的自动完成。
$ my_script foo <tab>
# should output possible options to the foo subcommand
# like /usr/local/libexec/my_script/foo <tab>
我已经从这个答案开始Bash completion from another completion,但 _command 或 _command_offset 1 对我来说似乎不起作用。
我当前的 /etc/bash_completion.d/my_script 如下所示
_my_script()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
if [[ "$COMP_CWORD" == 1 ]]; then
# 1. param: for program to be loaded
for i in $( ls /usr/local/libexec/my_script/ ); do
opts="${opts} ${i} "
done
COMPREPLY=( $(compgen -W "${opts}" ${cur}) )
else
# next param: of the program to be loaded
# how do I get the options of "foo" here?
fi
return 0
}
complete -F _my_script my_script
答案 0 :(得分:0)
我一看到您的问题,就会想到this
和sudo
的完成情况。他们都有你想要的类似行为。所以我找了他们的完成功能。以下是您缺少的一行:
git
它是在Ubuntu 16.04中从local root_command=${COMP_WORDS[0]}
_command_offset 1
复制的。我完全不知道它的含义。但它确实有效。