簡単なコードがありますbash_completion
。それがする唯一のことは、私がgrcat
thenTabと入力したときです/etc/grcat
。
_grcat() {
local word
COMPREPLY=()
if [ 1 -eq "$COMP_CWORD" ]; then
pushd /etc/grcat &>/dev/null || return 1
word="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=($(compgen -f "$word"))
popd &>/dev/null
fi
}
complete -F _grcat grcat
/etc/grcat
を除くすべてのファイルが一覧表示されるように変更する必要があります/etc/grcat/README
。
bash_completion
特定のファイルをどのように無視できますか?
答え1
-X
次のオプションもありますcompgen
。
_grcat() {
local word
COMPREPLY=()
if [ 1 -eq "$COMP_CWORD" ]; then
pushd /etc/grcat &>/dev/null || return 1
word="${COMP_WORDS[COMP_CWORD]}"
local filterpat='README'
COMPREPLY=($(compgen -f -X "$filterpat" -- "$word"))
popd &>/dev/null
fi
}
complete -F _grcat grcat
compgen
complete
、 と と-p
同じオプションをほとんど許可します-r
。
compgen
また、結果を生成して一致を標準出力に記録します。complete
後で使用できるようにルールのみが保存されます。
答え2
~からここ、探している変数はですFIGNORE
。次のことができます。
export FIGNORE=$FIGNORE:/etc/grcat/README
Complete
必要な操作を実行するためにコマンドを使用することもできるようです。Complete
以下を使用してコマンドに関する情報を表示します。ここそしてここ。
complete
実際には、スクリプトでコマンドを変更してみることができます。たとえば、次のようになります。
complete -f -X '/etc/grcat/README' grcat
マニュアルページcomplete
から
-X filterpat filterpat は、ファイル名拡張に使用されるモードです。以前のオプションと引数によって生成された可能な補完リストに適用され、
filterpatに一致するすべての補完はリストから削除されます。先頭! filterpat のパターンを無効にします。この場合、filterpat と一致しない補完は削除されます。