自动完成提升程序选项

时间:2017-12-01 17:00:44

标签: bash autocomplete boost-program-options complete compgen

经过数小时的搜索后,我最终编写了第一个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 对我来说似乎不起作用。

  • 如何获取 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

1 个答案:

答案 0 :(得分:0)

我一看到您的问题,就会想到thissudo的完成情况。他们都有你想要的类似行为。所以我找了他们的完成功能。以下是您缺少的一行:

git

它是在Ubuntu 16.04中从local root_command=${COMP_WORDS[0]} _command_offset 1 复制的。我完全不知道它的含义。但它确实有效。