我正在寻找一种让控制台自动完成的方法 - 例如给定一个类似的应用程序:
int main (int argc, char ** argv)
{
if (argc == 1) return EXIT_FAILURE;
if (strcmp(argv[1], "good")==0) printf("good\n");
if (strcmp(argv[1], "bad")==0) printf("bad\n");
return EXIT_FAILURE;
}
运行它时,我想在命令后按[tab],这样它就会给我一个可能有用的选项。
示例:
./a.out g[tab]
会自动完成
./a.out good
我不想编辑/etc/bash-completion.d/,我希望有一个更强大的自动完成,类似于可执行文件中的一个函数,可能会被调用 - 也许它可以查询一个数据库中可能的选项列表。或者也许输出一条消息,让您知道选项是什么。
如果您认为这完全不可能,请告诉我!
答案 0 :(得分:3)
完成是您运行应用程序的shell的属性。您必须为要支持的所有shell提供完成功能(bash,zsh,tcsh和fish具有可自定义的完成)。完成功能可以调用您的应用程序(例如运行you_application --list-possible-arguments
)或执行其选择的任何内容来生成完成 - 它已经是您术语中的“强大”完成。
在bash中,您使用complete
built-in声明完成。请查看/etc/completion.d
中的示例(gpg
是一个相当简单的示例; git
是一个相当复杂的示例。)
答案 1 :(得分:0)
如果你正在使用BASH,那么看看这个类似的帖子:
Auto-complete command line arguments
================================
如果您想提供自己的命令行,请查看Readline库:
GNU Readline库提供了一个 供使用的功能集 允许用户编辑的应用程序 键入的命令行。 Emacs和vi编辑模式都是 可用。 Readline库 包括其他功能 维护以前输入的列表 命令行,召回,也许 reedit那些线,并执行 以前的csh式历史扩张 命令。