bash_completionから特定のファイルを除外

bash_completionから特定のファイルを除外

簡単なコードがありますbash_completion。それがする唯一のことは、私がgrcatthenTabと入力したときです/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

compgencomplete、 と と-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 と一致しない補完は削除されます。

関連情報