私は私の問題を説明するために考えることができる最も簡単なコードを生成しました。
「.cc」で終わるファイルを処理するために「foo」コマンドを使用するとします。
complete -G '*.cc' foo
今、私の現在のディレクトリに「foo.cc」、「bar.cc」、「blah.cc」が含まれているとしましょう。 「foo」と入力して Tab キーを押すと、次のような結果が表示されます。
$ foo <tab><tab>
bar.cc blah.cc foo.cc
$ foo
これが私が期待していたものです。しかし、最初の文字「b」を入力して再試行すると、次のようになります。
$ foo b<tab><tab>
bar.cc blah.cc foo.cc
$ foo b
-Wのように「b」で始まる結果でフィルタリングしません。
私が見つけることができるすべてを検索しましたが、complete -G
私の要件に合った例が見つかりませんでした。これが一般的なものだと確信しています。ここでベストプラクティスは何ですか?
答え1
わかりました、答えを見つけました。bashの完了にパターンを追加する方法(圧縮解除用)は何ですか?
要約:「-G」はほとんど役に立ちません。最善の方法は、「-f」を使用してすべてのファイルを一致させ、次に-X '!*.cc'を使用して不要なファイルを除外することです。次に、良い結果を得るには、「-o plusdirs」を追加します。