Это работает из оболочки:
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) автозаполнение по умолчанию - O.K.
Объявление переменной и ее назначение в одной строке могут маскировать возвращаемые значения. Предпочтение отдается использованию $(..) вместо устаревших backticks. Учитывая отсутствие контекста вашего фрагмента кода, следующий код - это то, что я могу сделать, чтобы проверить его.
_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
Объявление переменной и ее назначение в одной строке могут маскировать возвращаемые значения. Предпочтение отдается использованию $(..) вместо устаревших backticks. Учитывая отсутствие контекста вашего фрагмента кода, следующий код - это то, что я могу сделать, чтобы проверить его.
_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