在shell中自定义完成

时间:2015-12-02 03:25:57

标签: c linux bash tab-completion

我需要开发一个实用程序,它将采用如下命令行参数:

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

我尝试过这些方法:

  1. 使用$ 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/ 创建一个孩子来调用帮助功能。
  2. 使用fork()使用单独的二进制文件运行帮助功能。
  3. 但两者都要求execv()正在运行。

    我不确定如何继续下去。

1 个答案:

答案 0 :(得分:1)

正如各种评论员所指出的那样,tab-completion是在shell中实现的,而不是在即将执行的程序中。

大多数shell都有用于实现自定义制表符完成的框架。对于bash,它是在readline库的帮助下实现的。 bash manual中有大量文档,互联网上有各种各样的教程,例如this one from Debian(不是认可,只是快速谷歌搜索的结果)。