Desabilita a classificação de COMPREPLY na função completa do bash

3

Eu tenho uma lista de palavras que devem estar presentes na ordem de aparecimento na conclusão de uma determinada chave, mas o bash parece estar classificando internamente o que é atribuído a COMPREPLY array. Como evitar isso?

Exemplo:

_comm() {
    _init_completion -s -n : || return
    case $prev in
        -a) COMPREPLY=(zxy abcdef tyuu fgsfds)
            ;;
    esac
}
complete -F _comm comm

Se você executar este código, o bash deverá completar

$ comm -a 

com

abcdef fgsfds tyuu zxy

i.e. ordenadas alfabeticamente.

    
por tijagi 14.07.2015 / 16:26

2 respostas

4

Desde o Bash 4.4, você pode usar a opção nosort . Em seu exemplo, altere a última linha para

complete -o nosort -F _comm comm

e você deve receber as conclusões sem a classificação alfabética.

Nota importante: as opções (especificadas com -o ) devem preceder funções ( -F ). É por isso que o codificador do código de salvação não funcionou.

    
por 31.12.2016 / 01:27
0

Isto deve ser alcançado modificando o comando completo:

complete -F _comm comm

para:

complete -F _comm comm -o nosort 

Como mencionado na documentação :

no entanto, eu não consegui isso para trabalhar no bash 4: /

Parece que é um recurso documentado, mas não implementado, de controlar a variável% read_rl_sort_completion_matches da linha de leitura.

Mais informações

    
por 30.12.2016 / 11:21