![bash 전체 기능에서 COMPREPLY 정렬 비활성화](https://linux55.com/image/68985/bash%20%EC%A0%84%EC%B2%B4%20%EA%B8%B0%EB%8A%A5%EC%97%90%EC%84%9C%20COMPREPLY%20%EC%A0%95%EB%A0%AC%20%EB%B9%84%ED%99%9C%EC%84%B1%ED%99%94.png)
특정 키에 따라 완성 순서로 표시되어야 하는 단어 목록이 있지만 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의 코드가 작동하지 않는 이유입니다.