Bash: программируемое завершение для общего сопоставления имен файлов без подстановочных знаков - PullRequest
0 голосов
/ 01 ноября 2019

Чтобы сэкономить драгоценное время, я написал следующий программируемый скрипт завершения и поместил его в мой .bashrc:

_fileComplete()
{
  OIFS="$IFS"
  local cur=${COMP_WORDS[COMP_CWORD]}
  cur="${cur//'\*'/'*'}"
  IFS=$'\n'
  COMPREPLY=( $(compgen -W '$(find -maxdepth 1 -iname "*$cur*" -type f -printf "%f\n" )' ) )
  IFS="$OIFS"
}

complete -f -F _fileComplete command

В каталоге, содержащем файлы file1, file2, ... он завершаетследующим образом:

command 1 [tab] #completes to file1 or shows all files containing "1" in the file name.

command il*1 [tab] #completes to file1 or shows all files containing "il" and "1" in this order in the file name.

Если существует более одного совпадения, файлы соответствия отображаются, и командная строка изменяется на

command il\*1

Таким образом, звездочки экранируются и будут мешатьследующее измененное завершение. Я учел это с помощью строки

  cur="${cur//'\*'/'*'}"

в скрипте, которая просто удаляет обратную косую черту перед звездочкой.

Есть ли более элегантный способ?

Спасибо!

...