[F] или ради элегантности и портативности, я стараюсь обеспечить автозаполнение внутри самого скрипта.
Вы не можете сделать это из сценария оболочки.
Традиционно, завершение Bash для сценариев и двоичных файлов обрабатывается записями в назначенных каталогах (например, /etc/bash_completion.d
и /usr/share/bash-completion/completions
для Bash).
Тем не менее, все это сделать , это вызвать встроенную команду в complete
с соответствующими параметрами. При первом вызове скрипта вы можете просто сделать запись либо в одном из этих каталогов (требуются права суперпользователя), либо в ~/.bashrc
.
Основной синтаксис в следующем:
# declare function to pass to `complete'
_myscript()
{
# declare variable `cur' (holds string to complete) as local
local cur
# initialize completion (abort on fail)
_init_completion || return
# if string to complete (`cur') begins with `-' (option)
if [[ "$cur" == -* ]] ; then
# complete to the following strings, if they start with `cur`
COMPREPLY=( $( compgen -W '-a -b -c --foo --bar' -- "$cur" ) )
else
# otherwise, complete to elements in current directory that begin with `cur'
_filedir -d
fi
# if declaring the function was successful, use it when the command is `myscript'
} && complete -F _myscript myscript
Например, вы можете сохранить вышеупомянутое в ~/.myscript_completion
и добавить
source ~/.myscript_completion
в ~/.bashrc
.