exclui um arquivo particular de bash_completion

3

Eu tenho um código bash_completion simples. A única coisa que acontece é quando digito grcat e, em seguida, Tab , ele oferece para completar nomes de arquivos de /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

Eu preciso modificá-lo para listar todos os arquivos de /etc/grcat , exceto /etc/grcat/README .

Como posso fazer com que bash_completion ignore um arquivo específico?

    
por Martin Vegter 12.08.2014 / 17:30

2 respostas

4

Você também pode usar a opção -X com 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 aceita a maioria das mesmas opções que complete , exceto -p e -r .

compgen também gera o resultado, escreve as correspondências na saída padrão. complete apenas armazena regras para uso futuro.

    
por 12.08.2014 / 18:30
2

De aqui , vejo que a variável que você está procurando é FIGNORE . Você pode fazer algo parecido,

export FIGNORE=$FIGNORE:/etc/grcat/README

Parece que você também pode usar o comando Complete para realizar o que está tentando fazer. Eu vejo as informações sobre o uso do comando Complete de aqui e aqui .

Você pode realmente tentar modificar o comando complete que você tem em seu script como algo parecido,

complete -f -X '/etc/grcat/README' grcat

Da página man de complete ,

-X filterpat filterpat is a pattern as used for filename expansion. It is applied to the list of possible completions generated by the preceding options and arguments, and each
completion matching filterpat is removed from the list. A leading ! in filterpat negates the pattern; in this case, any completion not matching filterpat is removed.

    
por 12.08.2014 / 17:38