5

在 bash 完成脚本中,假设COMPREPLY=(aa/ba/ aa/bb/). 调用脚本时,完成选项对用户来说如下所示:

$ foo aa/b<TAB>
aa/ba/
aa/bb/

但是,我想对这些选项的显示方式有更多的控制。特别是,我只想向用户显示每个 COMPREPLY 选项的子字符串,类似于现在 bash 中目录完成的工作方式:

$ foo aa/b<TAB>
ba/
bb/

有没有办法在 bash 中做到这一点?

4

2 回答 2

5

我遇到了同样的问题,我通过调整将完成函数绑定到命令的方式来修复它。我知道这在您处理文件系统中的实际文件时有效,我认为它适用于任何类型的文件路径,如选项,但我不确定。

前:

complete -F _fubar fubar

后:

complete -o filenames -F _fubar fubar

有关更多详细信息:可编程完成内置

于 2012-02-28T17:10:02.467 回答
2

这段取自 debian sid /etc/bash_completion 的代码应该会有所帮助:

# Remove colon-word prefix from COMPREPLY items
local colon_word=${1%${1##*:}}
local i=${#COMPREPLY[*]}
while [ $((--i)) -ge 0 ]; do
    COMPREPLY[$i]=${COMPREPLY[$i]#"$colon_word"}
done
于 2010-10-17T18:59:28.187 回答