在 bash 完成脚本中,假设COMPREPLY=(aa/ba/ aa/bb/)
. 调用脚本时,完成选项对用户来说如下所示:
$ foo aa/b<TAB>
aa/ba/
aa/bb/
但是,我想对这些选项的显示方式有更多的控制。特别是,我只想向用户显示每个 COMPREPLY 选项的子字符串,类似于现在 bash 中目录完成的工作方式:
$ foo aa/b<TAB>
ba/
bb/
有没有办法在 bash 中做到这一点?
在 bash 完成脚本中,假设COMPREPLY=(aa/ba/ aa/bb/)
. 调用脚本时,完成选项对用户来说如下所示:
$ foo aa/b<TAB>
aa/ba/
aa/bb/
但是,我想对这些选项的显示方式有更多的控制。特别是,我只想向用户显示每个 COMPREPLY 选项的子字符串,类似于现在 bash 中目录完成的工作方式:
$ foo aa/b<TAB>
ba/
bb/
有没有办法在 bash 中做到这一点?
我遇到了同样的问题,我通过调整将完成函数绑定到命令的方式来修复它。我知道这在您处理文件系统中的实际文件时有效,我认为它适用于任何类型的文件路径,如选项,但我不确定。
前:
complete -F _fubar fubar
后:
complete -o filenames -F _fubar fubar
有关更多详细信息:可编程完成内置
这段取自 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