特定のキーに従って完成順に表示する必要がある単語のリストがありますが、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のコードが機能しない理由です。