Bir bash tamamlama komut dosyası ayarlamaya çalışıyorum ve bazı sorunlar yaşıyorum.
Listelenen tamamlamalar belirli bir uzantıyla eşleşen dosyaları veya dizinleri (bu uzantıya sahip dosyaları içerebilir veya içermeyebilir) olacak şekilde ayarlamak istiyorum.
Sahip olduğum sorun, dosyaları ve dizinleri içermek için tamamlamaları elde etmenin tek yolunun şuna benzer bir şey kullanmaktır -o plusdirs -f -X '!*.txt'
, ancak bash dizinlerden birini tamamlamasına izin verdiğimde, sadece sonuna kadar bir boşluk ekler. yırtmaç.
_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
Tüm yorum satırlarını da denedim, ancak dizinleri bile genişletmiyorlar.
Test için, bunu bir .txt dosyası ve bir dizin "dir" (içinde bir .txt dosyası ile, ancak bu önemli değil) ile bir dizinde çalıştırıyorum. xyz <TAB>
Bu işlevle yazmak dizini ve .txt dosyasını listeler, ancak yazmak xyz d<TAB>
genişler xyz dir
("dir" ifadesinden sonra bir boşluk bırakarak).