3

Я создаю много маленьких сценариев, чтобы помочь мне в моей повседневной жизни. Я хотел бы предоставить автозаполнение для них, особенно, что я намерен поделиться ими с людьми.

Теперь я знаю, что могу создавать функции автозаполнения, которые получаются при входе в систему, но ради элегантности и переносимости я стараюсь обеспечить автозаполнение внутри самого скрипта.

Поскольку я использую zsh дома и использую bash на своем VPS, я хотел бы, чтобы скрипт был переносимым (или переключал поведение в соответствии с оболочкой), но я был бы доволен уже одним решением для любой среды.

1 ответ1

1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .