Bash 自动完成一个选项,而不运行应用程序
Bash autocomplete an option without running the application
我发现这段代码是bash自动完成的。但是,这对我来说看起来很奇怪。如果我根本不喜欢运行代码怎么办。如果我想输入./a.out
然后空格(不输入(,然后按 tab,我只想看到两个选项apple
和cherry
,如果我输入a
并按 tab,那么它会自动完成选项apple
和类似的c
。假设两个选项中只有一个是可以接受的:
./a.out apple
./a.out cherry
其中apple
和cherry
是选项,而不是目录中文件的名称。在第一种情况下,我希望your option is apple
的程序类型,在第二种情况下your option is cherry
.在任何其他情况下,程序应打印该选项无效的错误。
我在互联网上找到的所有示例,例如下面的示例,看起来您应该先运行该程序,然后它会做出反应。main
函数内部的 while 循环与程序的正常功能冲突。我是否误解了readline
图书馆?是否可以通过编辑以下代码来实现上述应用程序?
// sudo apt-get install libreadline-dev
// g++ -std=c++11 main.cpp -lreadline
#include <iostream>
#include "readline/readline.h"
#include "readline/history.h"
using namespace std;
int main(int argc, char** argv)
{
const char *line;
while ((line = readline("? ")) != nullptr) {
cout << "[" << line << "]" << endl;
if (*line) add_history(line);
free(line);
}
// if(argc!=2)
// {
// cout<<"<exe> one_parameter"<<endl;
// return 1;
// }
// string option=argv[1];
// if(option=="apple" || option=="cherry")
// cout<<"Your option is "<<option<<endl;
// else
// {
// cout<<"Error: invalid option "<<option<<endl;
// return 1;
// }
return 0;
}
//部分答案 - 为什么您可能希望在执行自动完成时调用应用程序
为应用程序实现自动完成的一种方法是让应用程序二进制文件对其进行配置(通过具有打印自动完成配置说明的标志或仅分析应用程序的--help
输出(。
示意图:
complete -F $(./a.out --generate-autocomplete-config) ./a.out
这就是为什么您可能会看到二进制文件作为自动完成实现的一部分实际调用的原因。
这与可执行文件无关。你需要把它放在一个文件中,并在bash中获取(source autocomplete_file
或. autocomplete_file
(。
_a_complete_()
{
local word=${COMP_WORDS[COMP_CWORD]}
local files='apple cherry'
COMPREPLY=( $( compgen -W "${files}" -- ${word} ) )
}
complete -F _a_complete_ ./a.out
在这里可以找到一个很好的文档。
相关文章:
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 两个函数模板候选项.将一个参数作为引用后,选择不太专业的模板
- Bash 自动完成一个选项,而不运行应用程序
- 通过样式表仅在QTabWidget中应用文本颜色一个特定选项卡
- 如何在一个功能中拥有所有选项?
- C++,当函子不是一个选项时,我如何编写带有自定义函数调用的模板化 RAII 包装器?
- 以不同的方式调度 r 值和 l 值,并使用 sfinae 禁用一个选项
- 如何创建一个程序来替换单个空白/选项卡的多个空白/选项卡
- 将字符指针按顺序存储在 map 中 std::map<char*, int> mymap。将其存储为字符或字符串不是一个选项
- clang,linux是否有一个选项可以在链接时更改共享库名称
- boost::p rogram_options:是否可以将一个选项设置为另一个选项的默认值
- 选项卡到qtableView中的下一个可见列
- 如何防止用户多次选择一个选项
- 带有一个选项卡的 QTabBar 太宽
- Qt 5测试版2,Qt Creator 2.6,MSVC错误:Qt Creaator需要一个编译器来构建.在工具包选项中
- GNU Make:如何在列表的每个条目前面添加一个选项
- ::P ostMessage 当我被选项卡切换到另一个程序时不起作用
- C++重载运算符两次,一个返回非常量引用,另一个返回常量引用,首选项是什么
- 如何在QTabWidget中仅将一个选项卡设置为在Qt中不可移动
- 我的程序编译并运行,但没有执行 switch 语句中的 6 个选项中的任何一个,我无法弄清楚原因