我正在寻找一种让控制台自动完成的方法 - 这样给定的应用程序如下:
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/,我希望有一个更强大的自动完成功能,比如可执行文件本身中的一个函数,它会被调用——也许这样它就可以查询数据库中的可能的选项列表。或者可能输出一条消息,让您知道选项是什么。
如果您认为这完全不可能,请告诉我!
最佳答案
完成是您运行应用程序的 shell 的一个属性。您必须为您想要支持的所有 shell 提供补全功能(bash、zsh、tcsh 和 fish 具有可自定义的补全)。完成函数可以调用您的应用程序(例如运行 you_application --list-possible-arguments
)或执行它选择的任何操作来生成完成——在您的术语中,它已经是“强”完成。
在 bash 中,您使用 complete
built-in 声明完成。 .查看 /etc/completion.d
例如(gpg
是一个相当简单的例子;git
是一个相当复杂的例子)。
关于c 控制台应用程序自动完成动态参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6107438/