Представьте, что у меня есть команда 'command', которая принимает аргументы foo:bar foo:foo bar:bar или bar:foo Я могу написать скрипт завершения командной строки, который я могу использовать в своей среде, чтобы получить завершение, которое выглядит следующим образом:
function _command_opt()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="foo:bar foo:foo bar:bar bar:foo"
if [[ ${prev: -7} == 'command' ]]
then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) );
return 0;
fi
}
complete -F _command_opt -o bashdefault -o default 'command'
Однако, если я наберу command f[tab][tab]
я получу список foo:bar и foo:foo, но ни один из них не будет завершен в моей командной строке (потому что они еще не различны. То, что я хотел бы сделать, это то, что это создает command foo:
и оставляет мой курсор в конце текущего слова (вместо добавления пробела), чтобы я мог затем ввести b
или f
и затем снова нажать табуляцию, чтобы завершить команду. Проблема в примере - просто показать, что я имею в виду ... в реальном случае комбинации префикс: суффикс довольно длинные, поэтому частичное завершение было бы действительно полезным. например, 25 различных команд, которые начинаются с префикса translationupdateprocess: и translationupdateprocess - это один из 25 различных одинаково длинных префиксов с таким количеством опций.
Кто-нибудь знает, как завершить работу bash?