在bash完成脚本中,假设COMPREPLY=(aa/ba/ aa/bb/)
。调用脚本时,完成选项对用户来说是这样的:
$ foo aa/b<TAB>
aa/ba/
aa/bb/
但是,我希望能够更好地控制这些选项的显示方式。特别是,我想向用户显示每个COMPREPLY选项的子字符串,类似于bash中目录完成的工作方式:
$ foo aa/b<TAB>
ba/
bb/
有没有办法在bash中这样做?
答案 0 :(得分:5)
我遇到了同样的问题,我通过调整将命令的完成功能绑定来修复它。我知道当你处理文件系统中的实际文件时这是有效的,我认为它可以用于任何类型的文件路径,如选项,但我不确定。
在:
complete -F _fubar fubar
后:
complete -o filenames -F _fubar fubar
答案 1 :(得分: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