我需要开发一个实用程序,它将采用如下命令行参数:
$ lsm -g <group> -t <type> -d <device>
我的项目经理希望当我们键入任何参数,如 lsm -g
并按下 Tab 时,将调用一个函数来运行数据库查询并获取帮助用户了解选项的值(value)。
类似于终端在这种情况下的行为:
$ 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()
使用单独的二进制文件运行帮助函数。
但两者都需要运行 lsm
。
我不确定如何进一步进行。
最佳答案
正如各种评论员所指出的,tab 完成是在 shell 中实现的,而不是在将要执行的程序中实现的。
大多数 shell 都有用于实现自定义制表符补全的框架。对于 bash
,它是在 readline
库的帮助下实现的。 bash manual 中有大量文档互联网上有各种各样的教程,例如 this one from Debian (不是背书,只是快速 Google 搜索的结果)。
关于在 shell 中自定义完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34034374/