bash, используя ls

Это работает из оболочки:

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.

2
задан 19 October 2017 в 19:25

2 ответа

Объявление переменной и ее назначение в одной строке могут маскировать возвращаемые значения. Предпочтение отдается использованию $(..) вместо устаревших 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
2
ответ дан 18 July 2018 в 05:03

Объявление переменной и ее назначение в одной строке могут маскировать возвращаемые значения. Предпочтение отдается использованию $(..) вместо устаревших 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
2
ответ дан 24 July 2018 в 18:14

Другие вопросы по тегам:

Похожие вопросы: