bash скрипт завершения, который вставлен в другую команду - PullRequest
0 голосов
/ 12 апреля 2020

Я хочу создать «скрипт завершения», который заменяет виртуальную команду (g) другой командой (cd).

Я хочу, чтобы g dl<Tab> динамически преобразовывался в cd ~/dl/.

Псевдоним - это не то, что я хочу, потому что я хочу продолжать печатать. Аргумент g извлекается с использованием хранилища ключей / значений

Я пытался присвоить значения массиву $COMP_WORDS для изменения написанного пользователем текста, но он не работает :

_g_completions() {
    local FILE="$HOME/.config/kv.awk/bookmarks.txt"
    local COMPLEN="${#COMP_WORDS[@]}"
    if [ "${COMP_WORDS[$COMP_CWORD]}" -lt 3 ]
    then
        # list keys
        COMPREPLY=($(compgen -W "$(awk '/^[A-Za-z]/ {print tolower($1)}' "$FILE")" -- "$CURRENT"))
    else
        # subsitute command
        COMP_WORDS[0]="cd"
        COMP_WORDS[1]="$(kv.awk bookmarks get "${COMP_WORDS[1]}")"
    fi
}

complete -F _g_completions g
...