我需要开发一个实用程序,该实用程序将采用如下命令行参数:
$ lsm -g <group> -t <type> -d <device>
我的项目经理希望当我们键入诸如
lsm -g
之类的任何参数并按Tab时,将调用一个函数来运行数据库查询并为用户获取有关选项值的帮助。与终端在这种情况下的行为类似:
$ cd <tab>
.bash_history .local/
.bash_logout .log-report.log.swp
.bash_profile .macromedia/
.bashrc .mozilla/
.cache/ Music/
.config/ .mysql_history
.dbus/ .nautilus/
Desktop/ .opera/
Documents/ .orc/
Downloads/ .p2/
.eclipse/ Pictures/
我尝试了以下方法:
fork()
创建一个 child 来调用帮助功能。 execv()
使用单独的二进制文件运行帮助功能。 但是两者都要求
lsm
正在运行。我不确定如何进一步进行。
最佳答案
正如各种注释者所指出的那样,制表符补全是在Shell中实现的,而不是在将要执行的程序中实现的。
大多数 shell 都有用于实现自定义制表符完成的框架。对于bash
,它是在readline
库的帮助下实现的。 bash manual中有大量文档,互联网上有各种各样的教程,例如this one from Debian(不是认可,而只是Google快速搜索的结果)。
关于c - Shell中的自定义完成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34034374/