compgen
シェルの組み込みには2つの問題があります。単純な bash の_filedir
ような (を使用ls
) コードで表示してみます。
_myfiledir(){
path="$cur"
prefix=`echo /$path | grep -o "[0-9a-Z\-+_/]*/"`
sufix=`echo /$path | grep "/[0-9a-Z\-+_]*$" | grep -o "[0-9a-Z\-+_]*$"`
res=`ls -p $prefix`
COMPREPLY=($( compgen -o nospace -W "$res" -- $sufix ))
}
この場合、cur=="usr/li"
その時prefix=="/usr/"
とsufix=="li"
私には2つの困難があります。スペースと交換。例えば:
$ script usr/li[TAB]
私は得る:
$ script lib/ <- additional space here
私は欲しい:
$ script usr/lib/ <- no space here
このコードは単なる例です。