Да, но вам нужно немного bash kung foo, чтобы построить такую систему. Способ завершения обычно работает, связывая нормальные функции с командами, которые вы хотите выполнить. Вы можете найти несколько основных примеров , чтобы лучше понять, как работает завершение, и приступить к разработке функций завершения. Кроме того, если у вас установлен пакет bash-completion
, вы можете найти в своей системе ряд других примеров, которые в настоящее время приводят к завершению вашей оболочки.
Вы также можете взглянуть на раздел завершения официального руководства по bash.
EDIT
Я попытался провести несколько экспериментов, и теперь я пришел к выводу, что вы не можете делать именно то, что вам нужно: bash не поддерживает текст справки рядом с complete
результатами. Что вы можете сделать, это добавить легенду для предоставленных завершающих слов. Это можно сделать либо в функции bash _myfoo
для использования в качестве complete -F _myfoo
, либо в команде через complete -C myfoo
, которая выводит легенду перед завершением.
Основное отличие состоит в том, что при использовании функции вы привязаны к Bash, в то время как команды могут быть написаны на любом языке, который вы выберете, при условии, что он может устанавливать необходимые переменные среды.
Вот небольшой пример:
skuro$ touch ~/bin/myfoo
skuro$ chmod +x ~/bin/myfoo
skuro$ _myfoo(){
> echo "result1 -- number one"
> echo "result2 -- number two"
> local cur prev
> _get_comp_words_by_ref cur prev
> COMPREPLY=( $(compgen -W "result1 result2" "$cur") )
> return 0
> }
skuro$ complete -F _myfoo myfoo
skuro$ myfoo result<TAB>
result1 -- number one
result2 -- number two
result1 result2