завершение удара с помощью 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 опции сценария (-тест) это специализированное требуемое автоматическое заполнение, для других опций сценария (-скорость, - определяют) автоматическое заполнение, по умолчанию в порядке.

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

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
2
ответ дан 2 December 2019 в 03:36

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

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