我需要开发一个实用程序,它将采用如下命令行参数:
var layers: [String:[String:String]]!
layers["key"] = ["layer":"layer"]
layers["key2"] = ["asd":"12312"]
print(layers)
我的项目经理希望当我们键入任何参数如$ lsm -g <group> -t <type> -d <device>
并按 Tab 时,将调用一个函数来运行数据库查询并获取有关该值的用户帮助选项。
类似于终端在这种情况下的行为:
lsm -g
我尝试过这些方法:
$ 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()
使用单独的二进制文件运行帮助功能。但两者都要求execv()
正在运行。
我不确定如何继续下去。
答案 0 :(得分:1)
正如各种评论员所指出的那样,tab-completion是在shell中实现的,而不是在即将执行的程序中。
大多数shell都有用于实现自定义制表符完成的框架。对于bash
,它是在readline
库的帮助下实现的。 bash manual中有大量文档,互联网上有各种各样的教程,例如this one from Debian(不是认可,只是快速谷歌搜索的结果)。