Я сделал это. Затем кандидат на завершение отображается следующим образом:
$ foo() { COMPREPLY=($(compgen -W "abc def ghi" -- "$2")); }
$ complete -E -F foo
$ (two times tab key)
abc def ghi
$
И я подумал, что ab c будет дополнено следующим:
$ ab (presstab key)
Однако команды, начинающиеся с ab, на самом деле появляются как кандидаты на завершение.
$ ab (two times tab key)
ab abrt-action-save-package-data
abrt-action-analyze-backtrace abrt-action-trim-files
abrt-action-analyze-c abrt-auto-reporting
В man bash, действительно, опция -E указывает, что оставшиеся опции и поведение относятся к «пустому» завершению команды (попытка завершения на пустых строках).
Он говорит, что только когда он "пустой", как описано, но нет никакой пользы для опции -E. Кроме того, кажется, что нет никакого способа выполнить завершение, кроме завершения имени команды, когда команда еще не распознается, как "ab tab double" выше.
Это то, что мы больше не можем делать, или там что-то упустили?