bash autocomplete não está funcionando, não 'complete'

1

Eu meu bashrc. tenho uma conclusão bash para o comando scp implementado da seguinte forma

function _scp_complete
{
  COMPREPLY=""
  COMPREPLY+=( $(cat ~/.ssh_complete ) )
  COMPREPLY+=( $( find . ! -name . -prune -type f ) )
}
complete -F _scp_complete scp

A idéia é que, ao pressionar scp [tab] , eu veja todos os arquivos no diretório atual e as palavras listadas no arquivo de texto ~/.ssh_complete . Vamos supor que este arquivo contenha as seguintes entradas:

[email protected]
[email protected]

O comportamento desejado é o seguinte: Eu digito scp alex@ [tab] e conclusão da tabulação 'completa' o comando para scp [email protected]. automaticamente, porque existem apenas dois argumentos possíveis começando com alex@ (supondo que não haja nenhum arquivo chamado semelhante a que no diretório de trabalho da currect.).

O comportamento que obtenho com a implementação atual é o seguinte: Eu digito scp alex@ [tab] e a conclusão da tabulação não completa nada, mas lista todos os possíveis argumentos abaixo do comando.

Como posso obter o comportamento desejado?

    
por Alex 06.02.2013 / 07:52

1 resposta

1

Isso funciona para mim:

_foo() 
{
  local cur
  COMPREPLY=()
  cur=${COMP_WORDS[COMP_CWORD]}
  opts=""
  while read line           
  do           
    opts+=" $line"
  done < ~/.ssh_complete
  opts+=" "
  opts+=$(find . ! -name . -prune -type f)
  case "$cur" in
    *)
    COMPREPLY=( $( compgen -W '$opts' -- $cur ) );;
  esac

  return 0
}

complete -F _foo scp
    
por 06.02.2013 / 09:30