Отключить сортировку COMPREPLY в полной функции bash

У меня есть список слов, которые должны присутствовать в порядке появления в завершении до определенного ключа, но bash, кажется, внутренне сортирует то, что назначено массиву COMPREPLY . Как этого избежать?

Пример:

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

Если вы запустите этот код, bash должен завершиться

 $ comm -a 

с

 abcdef fgsfds tyuu zxy 

т.е. отсортировано в алфавитном порядке.

С Bash 4.4 вы можете использовать опцию nosort . В вашем примере измените последнюю строку на

 complete -o nosort -F _comm comm 

и вы должны получить завершение без сортировки по алфавиту.

Важное примечание: опции (заданные с -o ) должны предшествовать функциям ( -F ). Вот почему код coderofsalvation не работал.

Это должно быть достигнуто путем изменения всей команды:

 complete -F _comm comm 

в:

 complete -F _comm comm -o nosort 

Как указано в документации :

однако я не получил это, чтобы работать над bash 4: /

Кажется, что это документированная, но не реализована функция управления переменной readline rl_sort_completion_matches .

Больше информации