这在 shell 中有效:
export files=`ls /home/tests/`
complete -o filenames -W "${files}" xtest
该脚本不:
_xtest () { .
local cur
local files=`ls /home/tests`
COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]}
#case "$cur" in
COMPREPLY=( $(compgen -W "${files}" -- ${cur}) )
# esac
return 0
}
complete -F _xtest -o filenames xtest
如何使用脚本从目录的文件列表中自动完成?我使用脚本是因为只有 1 个脚本选项 (-test) 才需要此自定义自动完成,对于其他脚本选项 (-speed、-define),默认自动完成即可
答案1
在一行中声明一个变量并对其进行赋值可以掩盖返回值。最好使用$(..)
而不是传统的反引号。鉴于您的代码片段缺乏上下文,以下代码是我在无法测试的情况下能做的最好的代码。
_xtest () {
local cur
local files
files=$(ls /home/tests)
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
case "$cur" in
-*)
COMPREPLY=( $( compgen -W $files --$cur ) );;
esac
return 0
}
complete -F _xtest -o filenames xtest