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のコードが機能しない理由です。

おすすめ記事