web-dev-qa-db-ja.com

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

〜/ Specialディレクトリにあるファイルをspecialcatsするbash関数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
Nathan FD

現在の引数でリストをフィルタリングする必要があるため、次のようになります。

COMPREPLY=( $(compgen -W "$(ls ~/Special)" -- "$2") )
1
Satō Katsura