bash 전체 기능에서 COMPREPLY 정렬 비활성화

bash 전체 기능에서 COMPREPLY 정렬 비활성화

특정 키에 따라 완성 순서로 표시되어야 하는 단어 목록이 있지만 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

즉, 알파벳순으로 정렬합니다.

답변1

Bash 4.4부터 nosort옵션을 사용할 수 있습니다. 귀하의 예에서 마지막 줄을 다음으로 변경하십시오.

complete -o nosort -F _comm comm

그리고 알파벳순으로 정렬하지 않고도 할 수 있어야 합니다.

중요: 옵션(지정된 사용 -o)함수 앞에 와야 합니다.( -F). 이것이 coderofsalvation의 코드가 작동하지 않는 이유입니다.

답변2

이것~해야 한다이는 전체 명령을 수정하여 달성할 수 있습니다.

complete -F _comm comm

입력하다:

complete -F _comm comm -o nosort 

에서 언급했듯이문서:

하지만 bash 4에서는 작동하지 않았습니다./

이것은 문서화되었지만 아직 readline 변수를 제어하는 ​​기능이 구현되지 않은 것 같습니다 rl_sort_completion_matches.

추가 정보

관련 정보