Bash自动完成一个选项,而无需运行应用程序

时间:2018-09-18 12:26:18

标签: c++ linux readline libreadline

我发现此代码可以自动完成bash。但是,这对我来说很奇怪。如果我根本不喜欢运行代码怎么办。如果我想输入./a.out,然后空格(不输入),然后按Tab键,我只想看到两个选项applecherry,如果我键入{{1} },然后按Tab键,然后它会自动完成选项a,对于apple也是如此。假设只有两个选项之一可以接受:

c

其中./a.out apple ./a.out cherry apple是选项,而不是目录中文件的名称。在第一种情况下,我想要的程序类型为cherry,在第二种情况下,我的程序类型为your option is apple。在任何其他情况下,程序都应显示错误信息,表明该选项无效。

我在互联网上找到的所有示例(例如以下示例)看起来都应该先运行该程序,然后它才能起作用。 your option is cherry函数中的while循环与程序的正常功能冲突。我是否误解了main库?通过编辑以下代码,可以实现上述应用程序吗?

readline

2 个答案:

答案 0 :(得分:1)

这与您的可执行文件无关。您需要将此文件放入文件中,然后将其源文件(source autocomplete_file. autocomplete_file)放入bash中。

_a_complete_()
{
    local word=${COMP_WORDS[COMP_CWORD]}
    local files='apple cherry'

    COMPREPLY=( $( compgen -W "${files}" -- ${word} ) )
}

complete -F _a_complete_ ./a.out

Here可以找到一个不错的文档。

答案 1 :(得分:1)

//部分答案-为什么您可能想在执行自动完成时调用该应用程序

实现应用程序自动完成功能的一种方法是使应用程序二进制文件对其进行配置(通过具有打印自动完成配置指令的标志,或者仅通过解析应用程序的loop.index0输出)。

示意性地:

--help

这就是为什么您可能会看到二进制文件实际上是自动完成实现的一部分的原因。