Я намагаюся налаштувати скрипт для завершення башти і маю деякі проблеми.
Я хотів би налаштувати його, щоб перераховані доповнення були або файлами, що відповідають певному розширенню, або каталоги (які можуть містити або не містити файли цього розширення).
Проблема, яка у мене виникає, полягає в тому, що єдиний спосіб я можу отримати доповнення до файлів і каталогів, використовуючи щось на кшталт -o plusdirs -f -X '!*.txt'
, але коли я дозволяю bash завершити один з каталогів, він просто додає пробіл у кінці, а не коса риса.
_xyz()
{
local cur=${COMP_WORDS[COMP_CWORD]}
local prev=${COMP_WORDS[COMP_CWORD-1]}
#COMPREPLY=( $( compgen -f -X '!*.txt' -- $cur ) )
#COMPREPLY=( $( compgen -f -G '*.txt' -- $cur ) )
#COMPREPLY=( $( compgen -o filenames -f -X '!*.txt' -- $cur ) )
#COMPREPLY=( $( compgen -o dirnames -f -X '!*.txt' -- $cur ) )
COMPREPLY=( $( compgen -o plusdirs -f -X '!*.txt' -- $cur ) )
return 0
}
complete -F _xyz xyz
Я також спробував усі коментовані рядки теж, але вони навіть не розширюють каталоги.
Для тестування я запускав це в каталозі з одним .txt-файлом та однією директорією "dir" (з файлом .txt всередині нього, хоча це ще не має значення). Введення за xyz <TAB>
допомогою цієї функції перераховує каталог і файл .txt, але введення xyz d<TAB>
розгортається до xyz dir
(ну, з пробілом після "dir").