compgenを使用したファイル名の自動補完

compgenを使用したファイル名の自動補完

私が書いているより大きなオートコンプリート機能の一部としてcompgenを使用してファイルのリストを生成したいと思います。私はcompgenbashのマニュアル項目を読んで、completeそこでそのオプションが-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それもできませんでした。

答え1

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

compgen -o filenames -A file ...
complete -o filenames -A file

答え2

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

# 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/1817610

関連情報