web-dev-qa-db-ja.com

compgenを使用したファイル名のオートコンプリート

私が書いているより大きなオートコンプリート関数の一部として、compgenを使用してファイルのリストを生成したいと思います。 compgencompleteのbashマニュアルエントリを読み、そこからオプション-G "*"が解決策になります。しかし、それを機能させることができませんでした:入力に関係なく、現在のディレクトリ内のファイルのリストが表示されました。

$ cmd <Tab>
aa bb cc
$ cmd a<Tab>
aa bb cc
$ cmd aa<Tab>
aa bb cc

したがって、compgenと同じオプションをサポートするcompleteを使用してこれをデバッグしようとしましたが、同じ結果が得られました。

$ complete -G "*" cmd
$ cmd a<Tab>
aa bb cc

私も試しましたcomplete -o filenames、しかしこれも機能しません。

5
daniel kullmann

私は自分で答えを見つけました:私は-A actionオプションを使用する必要があります:

compgen -o filenames -A file ...
complete -o filenames -A file
4
daniel kullmann

または、ファイル名にデフォルトのオートコンプリートを使用することもできます。

# at the top of the function to disable default
compopt +o default

# and where you need filename completion, re-enable it and send empty COMPREPLY
compopt -o default
COMPREPLY=()
return 0

に基づく https://stackoverflow.com/a/19062943/181761

2
carl verbiest