【发布时间】:2015-06-08 23:23:28
【问题描述】:
有没有办法控制 bash 完成只选择几个命令而不是路径、别名和函数中的所有内容?我们可以为空命令行设置一个默认处理程序,但是当输入第一个字母时,bash 会使用 PATH、别名和函数来完成它。有没有办法自定义命令搜索的完成?
例子:
$m[制表符] mycmd1 mycmd2 mycmd3
而不是在 PATH 中匹配的命令,别名和函数。
【问题讨论】:
标签: bash tab-completion
有没有办法控制 bash 完成只选择几个命令而不是路径、别名和函数中的所有内容?我们可以为空命令行设置一个默认处理程序,但是当输入第一个字母时,bash 会使用 PATH、别名和函数来完成它。有没有办法自定义命令搜索的完成?
例子:
$m[制表符] mycmd1 mycmd2 mycmd3
而不是在 PATH 中匹配的命令,别名和函数。
【问题讨论】:
标签: bash tab-completion
以下内容应从完成列表中删除“单词”。完成函数只返回一个 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
现在,您可以调整上述代码部分以获取您想要查找的内容(即只有一些命令)。提示。
【讨论】: