Автозавершення, специфічне для сценарію в оболонці


3

Я створюю багато маленьких скриптів, які допомагають мені у щоденному житті. Я хотів би надати їм автозаповнення, особливо якщо я маю намір поділитися ними з людьми.

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

Як я використовую zsh вдома і bash на моєму VPS, я хотів би, щоб сценарій був портативним (або перемикання поведінки відповідно до оболонки), але я був би задоволений вже одним рішенням, для будь-якого середовища.

Відповіді:


1

[F] або заради елегантності і портативності, я прагну забезпечити автозаповнення всередині самого сценарію.

Ви не можете зробити це зсередини скрипта оболонки.

Традиційно завершення Bash для сценаріїв і двійкових файлів обробляється записами в призначених каталогах (наприклад, /etc/bash_completion.d і /usr/share/bash-completion/completions для Bash).

Однак, все це робить виклик вбудованої команди complete з відповідними параметрами. Під час першого виклику сценарію ви можете просто зробити запис в одному з цих каталогів (вимагає привілеїв root) або ~/.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.


Непогано; Я зробив це так, коли скрипт викликається --add-autocomplete, він виконує функцію автозаповнення, тому його можна отримати при запуску.
Xananax
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.