LINUX.ORG.RU

Bash: как прикрутить к read автодополнение (autocompletion) текста (команд) по нажатию TAB?

 ,


4

1

Есть bash скрипт который ожидает ввод с клавиатуры используя встроенную в bash команду «read». Вопрос в том как научить этот скрипт автодополнениям вводимого текста, например, по аналогии с таковым для функций в bash:

cdp() {
  local proj=~/dev/projects/
  builtin cd "$proj$1"
}

_my_cdp() {
    local proj=~/dev/projects/
    local i p
    COMPREPLY=()
    while IFS= read -r i; do
        printf -v p '%q' "${i#"$proj"}"
        COMPREPLY+=( "$p" )
    done < <(compgen -d -- "$proj$2")
}

complete -o nospace -F _my_cdp  cdp

Только автодополняться должны не пути в файловой системе, как в этом коде, а именно определенные произвольные слова (команды) прописанные в скрипте.

https://stackoverflow.com/a/15220552/9646805

#!/bin/bash

set -o emacs;
tab() {
  READLINE_LINE="foobar"
  READLINE_POINT="${#READLINE_LINE}"
}
bind -x '"\t":"tab"';
read -ep "$ ";
READLINE_LINE - что в строке ввода
READLINE_POINT - в какой позиции стоит курсор

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

P. S. Это функционал не bash, а readline.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.