【发布时间】:2015-12-02 03:25:56
【问题描述】:
我需要开发一个实用程序,它将采用如下命令行参数:
$ 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()创建一个孩子来调用帮助函数。 - 使用
execv()使用单独的二进制文件运行帮助功能。
但两者都要求lsm 正在运行。
我不知道该怎么做。
【问题讨论】:
-
在 bash 中不按 tab 只完成文件名吗?是否还有其他专门用于命令行补全的 bash 命令?
-
@JerryJeremiah bash 有一个完整的自定义完成框架——如果 OP 确认他正在使用 bash,我可以发布一些相关信息的答案。在您的系统上查看 /etc/completion.d 或 /etc/bash_completion.d(但并非所有系统都默认提供)
-
谷歌自定义 bash 完成。 Here is a question with answers from SuperUser
-
亲爱的!!!!我的问题是我需要一个解决方案,以便在二进制名称
之后,如果指定了选项 并按下了 ,那么应该调用一个名为 help(g)的函数。这将显示可用的组选项(来自数据库的查询),然后用户选择其中一个,他也将继续输入另一个选项。(没有程序退出) -
我不会依赖你的程序而不是 shell 来完成。问题是您需要在按下 [Tab] 时让 shell 运行程序,我怀疑这会以任何方式解决 - 因为这是您无法使用 shell 修改(afaik)的东西。但是,您可以使用 ./binary_name 使程序运行,然后创建自己的提示,然后可以收听 [Tab] 并提供补全。
标签: c linux bash tab-completion