我正在尝试编写一个小的命令启动器应用程序,并且想在自己的完成系统中使用bash的制表符完成。我已经能够使用compgen -abck
获得常规命令的完成列表。
但是,我也想获取特定命令的完成情况:例如,输入git p
应该显示git命令的完成情况。
有什么办法可以使用compgen
做到这一点?如果没有,还有其他方法可以通过编程方式获取完成列表吗?
[编辑:为澄清起见,我不是要为bash提供完成-我的应用是GUI命令启动器。我只想在自己的应用程序中使用bash的现有补全。]
最佳答案
我真的不知道它是如何工作的,但是awesome window manager使用以下Lua代码来访问bash完成的结果:
https://github.com/awesomeWM/awesome/blob/master/lib/awful/completion.lua#L119
complete -p
我们找到complete -o bashdefault -o default -o nospace -F _git git
。我们记得后面的“_git”。 我们一起使用以下脚本:
__print_completions() {
printf '%s\n' "${COMPREPLY[@]}"
}
# load bash-completion functions
source /etc/bash_completion
# load git's completion function
_completion_loader git
COMP_WORDS=(git l)
COMP_LINE='git l'
COMP_POINT=6
COMP_CWORD=1
_git
__print_completions
输出:“log”
关于bash - 以编程方式访问特定命令的bash补全,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3520936/