bash完了スクリプトを設定しようとしていて、問題が発生しています。
リストされた補完が特定の拡張子に一致するファイル、またはディレクトリ(その拡張子のファイルを含む場合と含まない場合がある)のいずれかになるように設定したいと思います。
私が抱えている問題は、ファイルやディレクトリを含めるための補完を取得できる唯一の方法は、のようなものを使用することですが-o plusdirs -f -X '!*.txt'
、bashにディレクトリの1つを補完させると、スペースではなくスペースが最後に追加されるだけですスラッシュ。
_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
コメントアウトされた行もすべて試しましたが、ディレクトリを展開することさえしません。
テストのために、1つの.txtファイルと1つのディレクトリ「dir」を含むディレクトリでこれを実行しました(その中に.txtファイルがありますが、それはまだ重要ではありません)。xyz <TAB>
この関数を入力すると、ディレクトリと.txtファイルが一覧表示されますが、入力xyz d<TAB>
すると展開されますxyz dir
(「dir」の後にスペースが追加されます)。