[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 .