经过数小时的搜索,我最终写出了我的第一个 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>
我已经从另一个完成的这个答案开始,但是_command或_command_offset 1似乎对我不起作用。
- 如何获得foo的选项,以及如何在 my_script 中使用它?
我当前的/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