特定のディレクトリのファイルのみが完了するようにbashコマンドの補完をどのように使用できますか?

特定のディレクトリのファイルのみが完了するようにbashコマンドの補完をどのように使用できますか?

~/Special ディレクトリに bash 機能がspecialcatあるとしましょう。cat

specialcat () {
    cat ~/Special/$1
}

~/Special ディレクトリが次のように設定されているとします。

mkdir ~/Special
echo This is the first special file > ~/Special/firstfile
echo This is the second special file > ~/Special/secondfile

Specialcat機能の使い方は次のとおりです。

> specialcat firstfile
This is the first special file

パラメータ補完を有効にしたいです。

> specialcat firstf[TAB]

生産する

> specialcat firstfile

現在の作業ディレクトリが何であるか、どのファイルがあるかは問題ではありません。

これがこれまでの私の試みです

_options_specialcat () {
    COMPREPLY=( $(compgen -W "$(ls ~/Special)") )
}

complete -F _options_specialcat specialcat

これにより

> specialcat firstf[TAB]
firstfile   secondfile  
> specialcat firstf

つまり、一部のファイル名で Tab キーを押すとファイルのリストが表示されますが、コマンドは完了しません。

_options_specialcat目的の動作を生成するために機能をどのように変更できますか?

ベストアンサー1

現在のパラメータに基づいてリストをフィルタリングする必要があります。

COMPREPLY=( $(compgen -W "$(ls ~/Special)" -- "$2") )

おすすめ記事