Чтобы сэкономить драгоценное время, я написал следующий программируемый скрипт завершения и поместил его в мой .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//'\*'/'*'}"
в скрипте, которая просто удаляет обратную косую черту перед звездочкой.
Есть ли более элегантный способ?
Спасибо!