![如何自定义 bash 自动完成以列出另一个目录中的文件](https://linux22.com/image/120400/%E5%A6%82%E4%BD%95%E8%87%AA%E5%AE%9A%E4%B9%89%20bash%20%E8%87%AA%E5%8A%A8%E5%AE%8C%E6%88%90%E4%BB%A5%E5%88%97%E5%87%BA%E5%8F%A6%E4%B8%80%E4%B8%AA%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6.png)
如何自定义 bash 自动完成以仅针对一个脚本选项(-seq)列出另一目录中的文件,对于其他脚本选项(-speed、-define),默认自动完成是可以的,这就是我所拥有的
export files=`ls /home/tests/`
echo $files #debug
_xtest () {
local cur
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
#case "$cur" in
COMPREPLY=( $(compgen -W "${files}" -- ${cur}) )
# esac
return 0
}
complete -F _xtest -o filenames xtest
如何为其他选项启用默认 bash 完成?
答案1
应该使用 prev 而不是 cur :
_xtest () {
local prev
COMPREPLY=()
prev=${COMP_WORDS[COMP_CWORD-1]}
case "$prev" in
-seq )
COMPREPLY=( $(compgen -W "${files}" -- ${cur}) ) ;;
esac
return 0
}
complete -F _xtest -o filenames xtest