私が書いているより大きなオートコンプリート関数の一部として、compgenを使用してファイルのリストを生成したいと思います。 compgen
とcomplete
の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
、しかしこれも機能しません。
私は自分で答えを見つけました:私は-A action
オプションを使用する必要があります:
compgen -o filenames -A file ...
complete -o filenames -A file
または、ファイル名にデフォルトのオートコンプリートを使用することもできます。
# 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