【问题标题】:How to customise bash completion to pick only a custom set of commands?如何自定义 bash 完成以仅选择一组自定义命令?
【发布时间】:2015-06-08 23:23:28
【问题描述】:

有没有办法控制 bash 完成只选择几个命令而不是路径、别名和函数中的所有内容?我们可以为空命令行设置一个默认处理程序,但是当输入第一个字母时,bash 会使用 PATH、别名和函数来完成它。有没有办法自定义命令搜索的完成?

例子:

$m[制表符] mycmd1 mycmd2 mycmd3

而不是在 PATH 中匹配的命令,别名和函数。

【问题讨论】:

标签: bash tab-completion


【解决方案1】:

以下内容应从完成列表中删除“单词”。完成函数只返回一个 bash 数组,您可以对其进行操作以包含您喜欢的任何内容:

_b() {
        local word=${COMP_WORDS[COMP_CWORD]}
        COMPREPLY=($(compgen -f -- "${word}"))
        if [[ "$word" ]]; then
                local  w
                local  i=0
                local  n=${#COMPREPLY[*]}
                while [[ $i -lt $n ]]
                do
                        w=${COMPREPLY[$i]}
                        COMPREPLY[$i]="${w:${#word}}"
                        let i++
                done
        fi
}

我看不到任何方法可以完成所有命令,但我想如果你真的需要,你总是可以做这样的事情:

for c in /bin/* /usr/bin/* ~/bin/*
do
        complete -F _b $(basename $c)
done

现在,您可以调整上述代码部分以获取您想要查找的内容(即只有一些命令)。提示。

【讨论】:

  • 感谢您的回复。我正在尝试找出一种方法来自定义 bash 如何确定在键入命令的第一个字母时建议使用哪个命令。恐怕我想完全接管 bash 完成并只建议我的应用程序支持的命令。我有一个完成功能,我可以为我拥有的所有命令注册,并为空行注册一个默认完成。这是第一个工作完成,我需要自定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多