Conclusão bash personalizada com diretórios e um conjunto fixo

4

Estou tentando configurar uma conclusão do bash e ter dois problemas

  1. Para o parâmetro um, precisei de uma conclusão para diretórios
  2. Para o parâmetro dois, uma matriz fixa para conclusão, eu simplesmente não sei como deixar o bash fazer uma seleção, antes de sempre usar um script perl para os complexos.
_some_func()
{
    case $COMP_CWORD in
    1)
        # default completion ? how
        ;;
    2)
        COMPREPLY=( "go" "unbind" )
        # I should be using a program to echo "go" and "unbind",
        # and let bash decide which one to complete , right ? 
        # that's the only two possible parameters here
        ;;
    esac
}

complete -F _some_func some_func
    
por daisy 08.01.2012 / 15:32

1 resposta

5

Aqui está uma maneira de fazer isso: definir dirnames como a conclusão padrão e gerar conclusões personalizadas para o segundo argumento.

_some_func () {
  case $COMP_CWORD in
    1) :;; # let the default take over
    2) COMPREPLY=($(compgen -W "go unbind" "${COMP_WORDS[$COMP_CWORD]}"));;
    *) COMPREPLY=("");;
  esac
}
complete -F _some_func -d some_func

Você também pode chamar compgen -d quando $COMP_CWORD é 1, mas isso não funciona bem no bash porque você precisa escapar do espaço em branco na saída de compgen e não consegue distinguir uma nova linha que separa dois resultados de uma nova linha que está contida em uma conclusão (rara, mas possível).

    
por 08.01.2012 / 17:47