我正在尝试编写一个小的命令启动器应用程序,并且想在自己的完成系统中使用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”。
  • “git l”的长度为5,因此我们将COMP_COUNT = 6设置为。我们正在完成“git”的第一个参数,因此COMP_CWORD = 1。

  • 我们一起使用以下脚本:
    __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/

    10-11 17:44
    查看更多