特定のコマンド拡張子を持つディレクトリとファイルにbashオートコンプリートを指定する方法は?

特定のコマンド拡張子を持つディレクトリとファイルにbashオートコンプリートを指定する方法は?

拡張子があるか、引数として playファイルを受け入れるコマンドがあります。mp4mkv

play_completion.shファイルを作成しました。/etc/bash_completion.d/

ディレクトリと拡張子playのファイル名をオートコンプリートするコマンドが必要です。私はこの問題の助けを求めましたが、成功しませんでした。bashのオートコンプリートに関するドキュメントはかなり圧倒的です。 mp4mkv

これまで私はこれを持っています...

complete -f -X '!*.@(mp4|mkv)' play

ただし、それを使用して取得した後は、source /etc/bash_completion.d/play_completion.shディレクトリではなく希望の拡張子を持つファイル名のみがオートコンプリートされます。

ベストアンサー1

ただ追加してください-o plusdirsまた、オートコンプリート機能は、以前の結果にディレクトリ名を追加するようにコマンドをオートコンプリートします(パターン一致を無視)。

complete -f -o plusdirs -X '!*.@(mp4|mkv)' play
  • !否定的な完了。これは、自動競争が私たちが指定した一致パターン以外の完了結果を無視することを意味します*.@(mp4|mkv)

  • @指定されたパターンの少なくとも1つにのみ一致するようにオートコンプリートを指示します。これを@(pattern-list)Bashの拡張グローバル変数と呼びます。*.+(pattern-list)ここではglobを使用することもできます。

コマンドのファイル名とディレクトリ名を強制的に完了し、指定さplayれたパターンに対してのみ拡張するには、次のようにします。

complete -d -X '!*@(mp4|mkv)' -f -X '!*.@(mp4|mkv)' play

以下も機能するはずです。

complete -d -f -X '!*.@(mp4|mkv)' play

おすすめ記事