0

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

このコードは単なる例です。

4

1 に答える 1

0

-o スペースなし

compgenこのオプションはコンテキストでは機能しません。オプションの変更に使用compoptします。あなたの場合compopt -o nospace、空白の問題やcompopt -o filenamesファイル名に役立ちます。ファイル名には注意してください。変数に追加$prefixする必要があります。$resオプションfilenamesは、オートコンプリートのためにユーザーに表示されるときにフル パスの一部のみをカットします。

于 2014-02-25T17:20:20.467 に答える